日期:2014-05-18  浏览次数:20790 次

求教个算法
有一个坐标集合List<Point>
连接所有坐标点

要求:

两点间连线距离最短,尽量不要出现连线交叉

------解决方案--------------------
鱼与熊掌不可兼得,要求苛刻,程序无法实现。对于程序来说,“尽量”这个词的处理难度太大了,它没有人脑那么智能。
------解决方案--------------------
令我想到了蚊香,不知道怎么样
------解决方案--------------------
哈哈,我也觉得“尽量”这个词,要么就交叉要么就不交叉,如果是不交叉的话,起点的定义不同,结果也不同。
------解决方案--------------------
我没有想到好的办法呢,目前就是全部遍历一遍。。。如果你LIST里数量不多的话应该感觉不出什么计算延迟的吧。
------解决方案--------------------
你试过么?试一下看看咯!
------解决方案--------------------
你在网上搜索一下Dijkstra算法相关介绍和C#版代码看看吧。
------解决方案--------------------
旅行者
------解决方案--------------------
探讨
引用:
你在网上搜索一下Dijkstra算法相关介绍和C#版代码看看吧。

那个是在给定起点和终点的情况下取最短路线,不一定每个点都会连上

------解决方案--------------------
基本思路是这样:
首先是list一个点a和list中其他点取距离最小的点b记录下来,将这两点重list中移除,再用b重剩下的list中取距离最小的点c。
可用递归调用重复进行,直到list为空,此时递归过程中各个最小距离的和就是为从a开始的最小值。

而且,出现交叉现象的情况定不是最优算法,所以要将list中所有点都作为起始点来计算一次,其中最小值定为所求。