还是有点问题,不支持环行链
还有更简单的方法 nzl1116 发表于 2013-8-1 11:37 static/image/common/back.gif
还有更简单的方法
请指教,你给的函数我都没看明白呢。 如果可以请给讲解下吧?
本帖最后由 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)
)
)
)
)
)
) 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
新给的函数算不出? 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 12:28 static/image/common/back.gif
上面已修复,少了一条表达式
这叫地毯式搜索,比网上那些找节点的方法要简单许多,思路也清晰多了。搜索指定目录下的所有文件也可以用这种方法。 路过学习 (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]