求教一个算法(可能是图或树)

zhujiujun 2006-01-23 12:37:21
求教一个算法(可能是图)

如果在一个坐标平面中存在很多个点,点用CPoint结构表示(x,y),且每个点的坐标(CPoint.x,CPoint.y)都已知。
要求从其中一个指定点出发将所有点都遍历连接起来后得到的路径的总长最短。

//原始的坐标点

* * * *

* * *  *

* * * *

//结果,当然连通后的路径要是最短的

* *----*-----*
| |
* *---*----------*
| |
*--*--*-----------*

用什么算法比较容易实现,如果可能希望给出代码!
不胜感激。
...全文
272 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShowLovE 2006-01-25
  • 打赏
  • 举报
回复
局部搜索吧
1. 初始设置全局最优解 min = INT_MAX,
设有n个点 for( i = 0; i < n; i++ ) a[i] = i + 1;
2. 随机生成一条序列,
for( i = 0; i < n; i++ ) swap( a[i], a[rand()%n] );
3. 然后调整, 设dis( p, q ) = sqrt( ( p.x - q.x )^2 + ( p.y - q.y )^2 ).
则: 如果 dis( a[i], a[i+1] ) + dis( a[j], a[j+1] ) >
dis( a[i], a[j] ) + dis( a[i+1], a[j+1] ), 则交换 a[j], a[i+1] 两点, 一直到这个序列无法调整为止, 这时所得的总长即为一个局部最优解, 设为temp, if( temp > max ) max = temp, 然后转2, 3一直重复, 大概随机2000 - 3000次, 得到的解应该是近似最优了.
xtaddqqug 2006-01-25
  • 打赏
  • 举报
回复
最小生成树的问题
du51 2006-01-25
  • 打赏
  • 举报
回复
PRIM算法.成树后,检验关节点,比大小,成环.
挺难的.我不会.
zhujiujun 2006-01-25
  • 打赏
  • 举报
回复
继续研究~~感觉好难啊
zhujiujun 2006-01-24
  • 打赏
  • 举报
回复
有什么建议啊??
yy_msdn 2006-01-24
  • 打赏
  • 举报
回复
如果路径之间没有权值则用
深度优先 或者 广度优先
否则
用prim算法或者kruskal算法或者其它的

不管用什么算法,好像在图的点过多后都只会得到近似算法
zhujiujun 2006-01-24
  • 打赏
  • 举报
回复
是呀,假设有100个点,5分钟以内出不了结果,有没有实用的意义了
chenzhichao2008 2006-01-24
  • 打赏
  • 举报
回复
要求一个最优路线,而且要效率切实难,用穷举要(n-1)!真是吓人
寻开心 2006-01-23
  • 打赏
  • 举报
回复
常用的解法是蚁群或者退火算法来实现
寻开心 2006-01-23
  • 打赏
  • 举报
回复
这个叫做‘货郎问题’或者‘旅行推销员问题’
是经典的NP算法
在google上可以搜索到很多
ericqxg007 2006-01-23
  • 打赏
  • 举报
回复
这个应该是类似货郎担问题 使用动态规划来解
给了这么一个提示 楼主去查查相关方面的书吧
睡在床板下_ 2006-01-23
  • 打赏
  • 举报
回复
普林姆(不知道是不是) 算法。。。还有几个谁谁来着
很多种的, 数据结构的书上都会有的
chenzhichao2008 2006-01-23
  • 打赏
  • 举报
回复
中午再回答
fine10000 2006-01-23
  • 打赏
  • 举报
回复
深度优先算法或广度优先算法等,搜索最小路径的。
dingounan 2006-01-23
  • 打赏
  • 举报
回复
每个点保存到其它点的距离,从指定点开始一次动态规划
piaochen_2002 2006-01-23
  • 打赏
  • 举报
回复
网上查"图的最小生成树"算法,很多的!
zhujiujun 2006-01-23
  • 打赏
  • 举报
回复

谢谢,我网上先搜一下~~~

一个平面上可能有几百个点,程序的速度不能慢啊,难
cunsh 2006-01-23
  • 打赏
  • 举报
回复
mark

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧