matlab最短路程问题6,怎么在matlab经过所有给出点一次且路径最短?

ce2b1919fe648f93bf91cc05697ecca8.png

我曾看过一些有关A*算法的程序,不过写得比较简洁、易懂的还是风云写的A*算法教学实例,但是这个算法并没有进行优化,该程序要用到实际应用中,还会有一定的限制, 所以我对该算法进行了改进,并加上更详细的算法说明,使其具有更好的教学作用和实用价值。开始前我先给出A*算法的基本思路:

问题:求出2D的迷宫中起始点S到目标点E的最短路径?

算法:

findpath()

{

把S点加入树根(各点所在的树的高度表示从S点到该点所走过的步数);

把S点加入排序队列(按该点到E点的距离排序+走过的步数从小到大排序);

1、排序队列sort_queue中距离最小的第一个点出列,并保存入store_queue中

2、从出列的点出发,分别向4个(或8个)方向中的一个各走出一步

3、并估算第2步所走到位置到目标点的距离,并把该位置加入树,最后把该点按距离从小到大排序后并放入队列

中(由trytile函数实现)

4、如果该点从四个方向上都不能移动,则把该点从store_queue中删除

5、回到第一点,直到找到E点则结束

从目标点回溯树,直到树根则可以找到最佳路径,并保存在path[]中

}

文末附带的程序参考了风云的最短路径代码,并加以改进和优化:

把原来用于存放已处理节点的堆栈改为队列(store_queue),这样在从sort_queue队列出列时可直接放入

store_queue中。

解除了地图大小的限制(如果有64K内存限制时,地图大小只能是180x180)。

删除了原程序中的一些冗余,见程序中的注释。

程序继续使用dis_map数组保存各点历史历史最佳距离,也包含了某点是否已经经过的信息,虽然这样做可能会比使用链表多用一些内存,但是在搜索时可以节省不时间。

程序更具有实用性,可直接或修改后运用于你的程序中,但请你使用该代码后 应该返回一些信息给我,如算法的改进或使用于什么程序等。 本程序可以用Borland C++或DJGPP编译,并附带有一个数据文件,保存有地图的数据。最后值得一提的是,该地图文件格式与风云的源代码的地图格式不一样。

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值