明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: wowan1314

[讨论] (求助) 最长路径怎么求?。

[复制链接]
发表于 2013-3-30 11:41:28 | 显示全部楼层
还是有点问题,不支持环行链

点评

就是还没看懂!  发表于 2013-8-1 11:25

评分

参与人数 1明经币 +1 收起 理由
wowan1314 + 1 很给力! 不会出现环形的情况。

查看全部评分

发表于 2013-4-4 03:51:52 来自手机 | 显示全部楼层
直接用天正给排水都解决了
发表于 2013-8-1 11:37:00 | 显示全部楼层
nzl1116 发表于 2013-3-30 11:41
还是有点问题,不支持环行链

还有更简单的方法

点评

呵呵! 玩大了。 被关小黑屋了吧?!  发表于 2013-8-2 10:40
 楼主| 发表于 2013-8-1 11:45:15 | 显示全部楼层
nzl1116 发表于 2013-8-1 11:37
还有更简单的方法

请指教,你给的函数我都没看明白呢。 如果可以请给讲解下吧?
发表于 2013-8-1 11:49:57 | 显示全部楼层
本帖最后由 nzl1116 于 2013-8-1 12:27 编辑
wowan1314 发表于 2013-8-1 11:45
请指教,你给的函数我都没看明白呢。 如果可以请给讲解下吧?
  1. (defun GetAllPath (SPnt PntLst / PtLst0 PtLst1)
  2.   (setq PtLst1 (vl-remove-if-not
  3.    (function (lambda (x) (member SPnt x)))
  4.    PntLst
  5.         ) ;_ 所有包含SPnt点的点对表
  6. PtLst0 (vl-remove SPnt (apply 'append PtLst1)) ;_ 和点SPnt相连的所有点
  7.   )
  8.   (cond
  9.     ((not SPnt) nil)
  10.     ((not PtLst0) (list (list SPnt)))
  11.     ;;核心代码,批量递归
  12.     (T
  13.      (mapcar
  14.        (function (lambda (x) (cons SPnt x)))
  15.        (apply
  16.   'append
  17.   (mapcar
  18.     'GetAllPath
  19.     PtLst0
  20.     (mapcar (function (lambda (x) (vl-remove x PntLst))) PtLst1)
  21.   )
  22.        )
  23.      )
  24.     )
  25.   )
  26. )
 楼主| 发表于 2013-8-1 12:15:06 | 显示全部楼层
nzl1116 发表于 2013-8-1 11:49

(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

新给的函数算不出?
发表于 2013-8-1 12:28:46 | 显示全部楼层
wowan1314 发表于 2013-8-1 12:15
(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 ...

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

评分

参与人数 1金钱 +50 收起 理由
wowan1314 + 50 这个函数简短。 给力。估计能看明白了

查看全部评分

发表于 2013-8-1 18:53:36 | 显示全部楼层
nzl1116 发表于 2013-8-1 12:28
上面已修复,少了一条表达式

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

点评

呵呵。就是穷举吧。 只是递归我不太熟悉。 记得递归好像超过1W就不行,所以我都没去了解。  发表于 2013-8-1 19:23
发表于 2016-4-28 17:17:26 | 显示全部楼层
路过学习
发表于 2024-5-13 19:42:49 | 显示全部楼层
  1. (defun AYL-GetAllPath (SttPnt EndPnt PtsLst / AllPathLst CurPnt CurPathLst TestLst TmpLst DPtLst NxtPnt CurPathLst-s)
  2.   (setq AllPathLst nil)
  3.   (setq CurPathLst (List SttPnt))
  4.   (setq TestLst (list (list SttPnt CurPathLst PtsLst)))
  5.   (while TestLst
  6.     (setq TmpLst (car TestLst))
  7.     (setq TestLst (cdr TestLst))
  8.     (setq CurPnt (car TmpLst))
  9.     (setq CurPathLst (cadr TmpLst))
  10.     (setq PtsLst (caddr TmpLst))
  11.    
  12.     (setq TmpLst (vl-remove-if-not (function (lambda (Pts) (member CurPnt Pts))) PtsLst))
  13.     (while TmpLst
  14.       (setq DPtLst (car TmpLst))
  15.       (setq TmpLst (cdr TmpLst))
  16.       (if (equal (car DPtLst) CurPnt)
  17.         (setq NxtPnt (cadr DPtLst))
  18.         (setq NxtPnt (car DPtLst))
  19.       )
  20.       (setq CurPathLst-s (cons NxtPnt CurPathLst))
  21.       (setq TestLst (cons (list NxtPnt CurPathLst-s (vl-remove DPtLst PtsLst)) TestLst))
  22.       (if (equal NxtPnt EndPnt)
  23.         (setq AllPathLst (cons (reverse CurPathLst-s) AllPathLst))
  24.       )
  25.     )
  26.   )
  27.   (princ "\n")
  28.   (princ (length AllPathLst))
  29.   (princ "\n")
  30.   AllPathLst
  31. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 10:00 , Processed in 0.171731 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表