求lisp处理方法
已知平面有限个点,用直线连接这些点,不能成环,使连接这点的线长度和最小。并绘出连接图。leeli 发表于 2024-9-5 22:30
是的,无向有权最小生成树
(defun fp ()
(setq sn (ssget ":N" '((0 . "point"))))
(setq i 0 n (sslength sn) plst nil)
(while (< i n)
(setq plst (cons (cons (+ i 1) (cdr (assoc 10 (entget (ssname sn i))))) plst))
(setq i (+ i 1))
)
(reverse plst)
)
(defun mindist (alst blst)
(setq dlst nil)
(foreach a alst
(foreach b blst
(setq dlst (cons (list (car a) (car b) (distance (cdr a) (cdr b)))dlst))
)
)
(setq qlst (car (vl-sort dlst '(lambda(a b) (< (last a) (last b)) ) )))
qlst
)
(defun c:tt ()
(setq ptlst (fp))
(setq vlst (list (car ptlst)) rlst (cdr ptlst))
(while (not (null rlst))
(setq qlst (mindist vlst rlst))
(command "line" (cdr (assoc (car qlst) vlst)) (cdr (assoc (cadr qlst) rlst)) "" )
(setq vlst (cons (assoc (cadr qlst)rlst) vlst))
(setq rlst (vl-remove (assoc (cadr qlst)rlst) rlst))
)
) 你可能需要的是最小生成树的算法吧?
或者斯坦纳树?
在论坛里搜索:点连线,看看有没有你想要的。 highflybird 发表于 2024-9-5 17:43
你可能需要的是最小生成树的算法吧?
或者斯坦纳树?
是的,无向有权最小生成树 mahuan1279 发表于 2024-9-4 16:32
(defun fp ()
(setq sn (ssget ":N" '((0 . "point"))))
(setq i 0 n (sslength sn) plst nil) ...
谢谢 我学习学习 ,我没想出来,都准备去弄VBA了:D- mahuan1279 发表于 2024-9-4 16:32
(defun fp ()
(setq sn (ssget ":N" '((0 . "point"))))
(setq i 0 n (sslength sn) plst nil) ...
最小树要数组算的! leeli 发表于 2024-9-12 16:31
最小树要数组算的!
万物皆可表。 mahuan1279 发表于 2024-9-12 17:04
万物皆可表。
我开始也是你这样写的 ,不对,还要考虑前面点的关系 leeli 发表于 2024-9-12 18:04
我开始也是你这样写的 ,不对,还要考虑前面点的关系
你看了最小生成树算法了吗?
页:
[1]