首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案寻找无向图的所有可能路径

方案寻找无向图的所有可能路径
EN

Stack Overflow用户
提问于 2011-10-18 17:19:38
回答 2查看 1.1K关注 0票数 1

我在打印所有可能的路径时遇到了问题。目前我只能打印出一个路径,如果( path -demo "J“"I"),程序将显示这个错误mcdr:期望类型为<mutable-pair>的参数;给定#f

代码语言:javascript
复制
 (define net
  '(("A" "B")
    ("B" "A" "C")
    ("C" "B" "D")
    ("D" "C" "E" "F")
    ("F" "I" "D")
    ("I" "F")
    ("E" "D" "J")
    ("J" "E" "G")
    ("G" "J" "H"))) 

 (define (path-demo start finish)
         (for-each (lambda (x) (display x) (display " "))
                   (cons "Route:" (shortest-path start finish net))))

 (define (shortest-path start end net)
    (bfs end (list (list start)) net))

 ;; Breadth-first search
  (define (bfs end queue net)
    (display queue) (newline) (newline) ; entertainment
    (if (null? queue)
      '()
      (let ((path (car queue)))
       (let ((node (car path)))
         (if (equal? node end) ;; Graham used CL eql
             (reverse path)
             (bfs end 
                  (append (cdr queue)
                          (new-paths path node net))
                  net))))))

 (define (new-paths path node net)
   (map (lambda (n) (cons n path)) (cdr (assoc node net))))

;;
(path-demo "J" "I")
EN

回答 2

Stack Overflow用户

发布于 2011-10-22 20:12:20

在您对net的定义中,您忘记了列出H所连接的节点。

当错误发生时,node和net具有以下值:

代码语言:javascript
复制
node: H 
net: ((A B) (B A C) (C B D) (D C E F) (F I D) (I F) (E D J) 
      (J E G) (G J H)))

因此

代码语言:javascript
复制
(assoc node net))

将返回#f,因为H在net中没有关联。这会导致来自cdr的错误:

代码语言:javascript
复制
cdr: expects argument of type <pair>; given #f
票数 1
EN

Stack Overflow用户

发布于 2011-10-18 17:31:14

下面的代码很可能返回#f

代码语言:javascript
复制
(cdr (assoc node net))

关于注释(用于格式化):

代码语言:javascript
复制
(define (new-paths path node net)
   (write node)
   (newline)
   (map (lambda (n) (cons n path)) (cdr (assoc node net))))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7805005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档