找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: q3_2006

[求助] (问题解决,谢谢各位大师的帮助!)

[复制链接]

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-20 21:33:07 | 显示全部楼层
wowan1314 发表于 2014-5-20 20:50
看了下发现我的也错了!

跟大家结果一样。

下线了...看来只能后面二次处理下....总之不能出现排序什么的...
(defun tx (l / a b i j)
  (setq i  -1)
  (while (setq a (nth (setq i (1+ i)) l))
    (setq j i)
    (while (setq b (nth (setq j (1+ j)) l))
      (cond
       ((equal (cadr (last a)) (car (car a))) (setq l (subst (append a b) a (vl-remove b l))))
       ((equal (car (car a)) (cadr (last b))) (setq l (subst (append b a) b (vl-remove a l))))
       )
    )
  )l
)

就是觉得这样太啰嗦呀....真是麻烦大家了....不好意思....{:soso_e110:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-20 21:34:26 | 显示全部楼层

不能出现排序的....{:soso_e127:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-5-20 22:06:20 | 显示全部楼层
本帖最后由 wowan1314 于 2014-5-20 22:07 编辑

应该差不多
  1. (defun c:t123 ( / t1 t2 l1 l3 l2 l4)
  2.     (defun t1 (lst / a b l1 l2 )
  3.         (setq a (car lst) b (car a) lst (vl-remove a lst))
  4.         (while
  5.             (setq l1 (vl-member-if '(lambda(x)(= b (cadr x))) lst))
  6.             (setq a (car l1) b (car a) lst (vl-remove a lst) l2 (cons a l2))
  7.         )
  8.         (setq l3 lst)
  9.         l2
  10.     )
  11.     (defun t2 (lst / a b l1 l2 )
  12.         (setq a (car lst) b (cadr a) lst (vl-remove a lst) l2 (cons a l2))
  13.         (while
  14.             (setq l1 (vl-member-if '(lambda(x)(= b (car x))) lst))
  15.             (setq a (car l1) b (cadr a) lst (vl-remove a lst) l2 (cons a l2))
  16.         )
  17.         (setq l3 lst)
  18.         (reverse l2)
  19.     )
  20.     (setq lst '((6 7)(4 "A")(8 "B")(1 2)(3 4)(6 5)(2 3)("A" 9)("B" 10)(7 8)) L3 T)
  21.     (while l3
  22.         (if (setq l1 (t1 lst))(setq l2 (append l1 (t2 lst)))(setq l2 (t2 lst)))
  23.         (setq  LST L3 l4 (cons l2 l4))
  24.     )
  25.     (reverse L4)
  26. )

点评

.....没有对哟...大师....  详情 回复 发表于 2014-5-21 10:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-5-21 09:23:41 | 显示全部楼层
(setq lst '((6 7)(4 "A")(8 "B")(1 2)(3 4)(6 5)(2 3)("A" 9)("B" 10)(7 8)))
(defun tt (lst / BIAOJI LST1 LST2 OUT OUT1 OUT2)
  (setq out '())
  (setq out1 (cons (setq out2 (car lst)) nil)
        lst (cdr lst)
        )
  (setq lst1 '() lst2 '())
  (foreach item lst
    (if (= (type (car item)) 'INT)
      (setq lst1 (cons item lst1))
      (setq lst2 (cons item lst2))
      )
    )
  (setq lst1 (vl-sort lst1 (function (lambda(x y) (< (car x) (car y))))))
  (setq lst2 (vl-sort lst2 (function (lambda(x y) (< (car x) (car y))))))
  (setq lst (append out1 lst1 lst2))
  (while lst
    (setq out1 (cons (setq out2 (car lst)) nil)
        lst (cdr lst)
        )
    (setq biaoji t)
    (while (and lst biaoji)
      (if (setq out2 (assoc (cadr out2) lst))
        (setq out1 (cons out2 out1)
              lst (vl-remove out2 lst))
        (setq biaoji nil)
        )
        )
    (setq out (cons (reverse out1) out))
    )
  (reverse out)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-5-21 10:00:04 | 显示全部楼层
q3_2006 发表于 2014-5-20 18:09
长老...也不对哟...没这么简单...

题目本身是有点费解,联系你前面的直线首尾相连的帖子才理解。
实际上题目本身的点是无序的,所以不需要排序,和直线的情况一样,只要首尾相连,可以是朝后连,也可以朝前连,因此需要一个双向判别。
有几种思路:
1.先判断哪一个是起始点,再向后连。
2.先向后连,再对连接后的表判断,如果前面的头接后面的尾则合并。
3.先向后连,把连接后的表前后颠倒合并,再重新连接。
下面的代码是第三种方法(这种方法在简单情况下是正确的,如果分叉多,不知情况怎样,今天有点头昏,就不多想了):

  1. (setq lst '((6 7) (4 "A") (8 "B") (1 2) (3 4) (6 5) (2 3) ("A" 9) ("B" 10) (7 8)))
  2. (defun tt1(lst)
  3.   (setq b (car lst)
  4.         a (list b)
  5.         d nil
  6.         lst(cdr lst)
  7.   )
  8.   (while lst
  9.     (if (setq c (assoc (cadr b) lst))
  10.       (setq a (cons c a)
  11.             lst (vl-remove c lst)
  12.             b c
  13.         )
  14.       (setq d (cons (reverse a) d)
  15.             b (car lst)
  16.             a (list b)
  17.             lst (cdr lst)
  18.       )
  19.     )
  20.   )
  21.   (cons (reverse a) d)
  22. )
  23. (defun tt(lst)
  24.   (tt1  (apply 'append (tt1 lst)))
  25. )

_$ (tt lst)
(((6 7) (7 8) (8 "B") ("B" 10)) ((1 2) (2 3) (3 4) (4 "A") ("A" 9)) ((6 5)))



点评

没说清楚...不好意思....但长老.......还是不对....其实想知道两段代码完成的事...能不能合并成一次完成.... (defun tt (lst / p1 p2 tmp1 tmp2) (setq tmp2 (list)) (while lst (setq p1 (car l  详情 回复 发表于 2014-5-21 10:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-21 10:29:59 | 显示全部楼层
ll_j 发表于 2014-5-21 10:00
题目本身是有点费解,联系你前面的直线首尾相连的帖子才理解。
实际上题目本身的点是无序的,所以不需要 ...

没说清楚...不好意思....但长老....{:soso_e110:}...还是不对....其实想知道两段代码完成的事...能不能合并成一次完成....

(defun tt (lst / p1 p2 tmp1 tmp2)
(setq tmp2 (list))
(while lst
(setq p1 (car lst) tmp1 (list p1) lst (cdr lst))
(while (setq p2 (assoc (cadr p1) lst))
(setq tmp1 (cons p2 tmp1) p1 p2)
(setq lst (vl-remove p2 lst))
)
(setq tmp2 (cons (reverse tmp1) tmp2))
)
(reverse tmp2)
)

(defun tx (l / a b i j)
  (setq i  -1)
  (while (setq a (nth (setq i (1+ i)) l))
    (setq j i)
    (while (setq b (nth (setq j (1+ j)) l))
      (cond
              ((equal (cadr (last a)) (car (car b))) (setq l (subst (append a b) a (vl-remove b l))))
              ((equal (car (car a)) (cadr (last b))) (setq l (subst (append b a) b (vl-remove a l))))
              )
    )
  )l
)


(tx (tt '((6 7)(4 "A")(8 "B")(1 2)(3 4)(6 5)(2 3)("A" 9)("B" 10)(7 8))))
->(((6 7) (7 8) (8 "B") ("B" 10)) ((1 2) (2 3) (3 4) (4 "A") ("A" 9)) ((6 5)))
这样是对的......
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-21 10:31:46 | 显示全部楼层

.....没有对哟...大师....{:soso_e110:}

点评

漏了一句! 这下应该对了!  详情 回复 发表于 2014-5-21 15:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-21 11:38:48 | 显示全部楼层
实质找出所有路径, 这有个 C++ 程序

http://www.cnblogs.com/qi09/archive/2011/05/24/2055643.html

点评

不懂..  详情 回复 发表于 2014-5-21 12:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-21 12:19:03 | 显示全部楼层
c++不懂.....找出所有路径...LISP基本也搞定了.....谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-21 12:20:34 | 显示全部楼层
csharp 发表于 2014-5-21 11:38
实质找出所有路径, 这有个 C++ 程序

http://www.cnblogs.com/qi09/archive/2011/05/24/2055643.html

不懂..{:soso_e110:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-21 14:53:32 | 显示全部楼层

  1. (defun ff (lst / ret n tmp)
  2.   (setq        ret (list (list (car lst)))
  3.         lst (cdr lst)
  4.   )
  5.   (while lst
  6.     (while (setq n (assoc (cadr (last (car ret))) lst));_往后找
  7.       (setq ret        (cons (append  (car ret) (list n)) (cdr ret))
  8.             lst        (vl-remove n lst)
  9.       )
  10.     )
  11.     (if        lst
  12.       (progn
  13.         (setq tmp (mapcar 'reverse lst))
  14.         (while (setq n (assoc (caaar ret) tmp)) ;_往前找
  15.           (setq        ret (cons (cons (reverse n) (car ret)) (cdr ret))
  16.                 tmp (vl-remove n tmp)
  17.           )
  18.         )
  19.         (setq lst (mapcar 'reverse tmp))
  20.       )
  21.     )
  22.     (if        lst
  23.       (setq ret        (cons (list (car lst)) ret)
  24.             lst        (cdr lst)
  25.       )
  26.     )
  27.   )
  28.   ret
  29. )

点评

就是这样....学习了...  详情 回复 发表于 2014-5-21 15:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-21 15:03:03 | 显示全部楼层

就是这样....学习了...{:soso_e152:}

点评

对返回值再处理就可以在树形结构中找出所有两点间的最短路径了  详情 回复 发表于 2014-5-21 15:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-5-21 15:04:09 | 显示全部楼层
本帖最后由 wowan1314 于 2014-5-21 17:02 编辑
q3_2006 发表于 2014-5-21 10:31
.....没有对哟...大师....

漏了一句!
这下应该对了!
  1. ;尝试后续处理
  2. (car
  3.     (vl-sort
  4.         (mapcar
  5.             '(lambda(l1)
  6.                 (mapcar '(lambda(x)(apply '+ x))
  7.                     (mapcar '(lambda(x)(apply 'distance x))
  8.                         (mapcar 'list
  9.                             l1 (cdr l1)
  10.                         )
  11.                     )
  12.                 )
  13.             )
  14.             l
  15.         )
  16.         '<
  17.     )
  18. )
  1. (defun t123 (lst / t1 t2 l1 l3 l2 l4)
  2.     ;向前
  3.     (defun t1 (lst / a b l1 l2 )
  4.         (setq a (car lst) b (car a) lst (vl-remove a lst))
  5.         (while
  6.             (setq l1 (vl-member-if '(lambda(x)(= b (cadr x))) lst))
  7.             (setq a (car l1) b (car a) lst (vl-remove a lst) l2 (cons a l2))
  8.         )
  9.         (setq l3 lst)
  10.         l2
  11.     )
  12.     ;向后
  13.     (defun t2 (lst / a b l1 l2 )
  14.         (setq a (car lst) b (cadr a) lst (vl-remove a lst) l2 (cons a l2))
  15.         (while
  16.             (setq l1 (vl-member-if '(lambda(x)(= b (car x))) lst))
  17.             (setq a (car l1) b (cadr a) lst (vl-remove a lst) l2 (cons a l2))
  18.         )
  19.         (setq l3 lst)
  20.         (reverse l2)
  21.     )
  22.     (setq l3 1)
  23.     (while l3
  24.         (if (setq l1 (t1 lst))
  25.             (progn
  26.                 (setq l2 (append l1 (t2 lst)))
  27.                 (mapcar '(lambda(x)(setq l3 (vl-remove x l3))) l1)
  28.             )
  29.             (setq l2 (t2 lst))
  30.         )
  31.         (setq lst l3 l4 (cons l2 l4))
  32.     )
  33.     (reverse l4)
  34. )

点评

对了....谢谢大家....辛苦了...  详情 回复 发表于 2014-5-21 15:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2014-5-21 15:45:18 | 显示全部楼层
wowan1314 发表于 2014-5-21 15:04
漏了一句!
这下应该对了!

对了....谢谢大家....辛苦了...{:soso_e121:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-21 15:47:55 | 显示全部楼层
q3_2006 发表于 2014-5-21 15:03
就是这样....学习了...

对返回值再处理就可以在树形结构中找出所有两点间的最短路径了

点评

明白大师说什么了....谢谢!  详情 回复 发表于 2014-5-21 16:06
没想这么多...我程度差...大师能详解不....抽点空....  详情 回复 发表于 2014-5-21 15:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 06:36 , Processed in 0.245315 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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