nzl1116 发表于 2013-3-30 11:41:28

还是有点问题,不支持环行链

longcashman 发表于 2013-4-4 03:51:52

直接用天正给排水都解决了

nzl1116 发表于 2013-8-1 11:37:00

nzl1116 发表于 2013-3-30 11:41 static/image/common/back.gif
还是有点问题,不支持环行链

还有更简单的方法

wowan1314 发表于 2013-8-1 11:45:15

nzl1116 发表于 2013-8-1 11:37 static/image/common/back.gif
还有更简单的方法

请指教,你给的函数我都没看明白呢。 如果可以请给讲解下吧?

nzl1116 发表于 2013-8-1 11:49:57

本帖最后由 nzl1116 于 2013-8-1 12:27 编辑

wowan1314 发表于 2013-8-1 11:45 http://bbs.mjtd.com/static/image/common/back.gif
请指教,你给的函数我都没看明白呢。 如果可以请给讲解下吧?(defun GetAllPath (SPnt PntLst / PtLst0 PtLst1)
(setq PtLst1 (vl-remove-if-not
   (function (lambda (x) (member SPnt x)))
   PntLst
      ) ;_ 所有包含SPnt点的点对表
PtLst0 (vl-remove SPnt (apply 'append PtLst1)) ;_ 和点SPnt相连的所有点
)
(cond
    ((not SPnt) nil)
    ((not PtLst0) (list (list SPnt)))
    ;;核心代码,批量递归
    (T
   (mapcar
       (function (lambda (x) (cons SPnt x)))
       (apply
'append
(mapcar
    'GetAllPath
    PtLst0
    (mapcar (function (lambda (x) (vl-remove x PntLst))) PtLst1)
)
       )
   )
    )
)
)

wowan1314 发表于 2013-8-1 12:15:06

nzl1116 发表于 2013-8-1 11:49 static/image/common/back.gif


(setq AA '(((1 1) (2 2)) ((2 2) (3 3)) ((7 7) (3 3)) ((4 4) (3 3))((4 4) (5 5))((2 2) (100 100)) ) )
(GetAllPath '(1 1)AA) ==nil

新给的函数算不出?

nzl1116 发表于 2013-8-1 12:28:46

wowan1314 发表于 2013-8-1 12:15 static/image/common/back.gif
(setq AA '(((1 1) (2 2)) ((2 2) (3 3)) ((7 7) (3 3)) ((4 4) (3 3))((4 4) (5 5))((2 2) (100 100 ...

上面已修复,少了一条表达式

nzl1116 发表于 2013-8-1 18:53:36

nzl1116 发表于 2013-8-1 12:28 static/image/common/back.gif
上面已修复,少了一条表达式

这叫地毯式搜索,比网上那些找节点的方法要简单许多,思路也清晰多了。搜索指定目录下的所有文件也可以用这种方法。

lijiayin110 发表于 2016-4-28 17:17:26

路过学习

nzl1116 发表于 2024-5-13 19:42:49

(defun AYL-GetAllPath (SttPnt EndPnt PtsLst / AllPathLst CurPnt CurPathLst TestLst TmpLst DPtLst NxtPnt CurPathLst-s)
(setq AllPathLst nil)
(setq CurPathLst (List SttPnt))
(setq TestLst (list (list SttPnt CurPathLst PtsLst)))
(while TestLst
    (setq TmpLst (car TestLst))
    (setq TestLst (cdr TestLst))
    (setq CurPnt (car TmpLst))
    (setq CurPathLst (cadr TmpLst))
    (setq PtsLst (caddr TmpLst))
   
    (setq TmpLst (vl-remove-if-not (function (lambda (Pts) (member CurPnt Pts))) PtsLst))
    (while TmpLst
      (setq DPtLst (car TmpLst))
      (setq TmpLst (cdr TmpLst))
      (if (equal (car DPtLst) CurPnt)
        (setq NxtPnt (cadr DPtLst))
        (setq NxtPnt (car DPtLst))
      )
      (setq CurPathLst-s (cons NxtPnt CurPathLst))
      (setq TestLst (cons (list NxtPnt CurPathLst-s (vl-remove DPtLst PtsLst)) TestLst))
      (if (equal NxtPnt EndPnt)
        (setq AllPathLst (cons (reverse CurPathLst-s) AllPathLst))
      )
    )
)
(princ "\n")
(princ (length AllPathLst))
(princ "\n")
AllPathLst
)
页: 1 [2]
查看完整版本: (求助) 最长路径怎么求?。