| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2370 人关注过本帖
标题:迷宫问题求教 怎么才能优化
只看楼主 加入收藏
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
结帖率:63.64%
收藏
已结贴  问题点数:2 回复次数:3 
迷宫问题求教 怎么才能优化
当迷宫是这样时用深搜老超时。怎么才能优化呢
....................
XXXXXXXXXXXXXXXXXXX.
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
..................XX
..................X.

X是墙
入口是 左上角 出口是右下角。迷宫不通

[此贴子已经被作者于2016-9-23 21:27编辑过]

2016-09-23 21:24
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 
你是不是忘了做标记,这个平面图算法复杂度也就O(M);m取决于地图长宽。每一个结点只要踩过一次就可以了,下次不必递归了。
具体的代码实现就是你每到一个结点,先把他自身标记为used[][]=1;递归访问其右、上、下、左,但凡是跳出矩阵(x,y不合理的)或者已经标记为used[][]==1的就不走,没去的继续递归。任何时刻如果踩到了终点,结束递归。输出YES。如果所有可以被递归到的结点都用完了还是没踩到终点,输出NO。(注意,此时矩阵中还是可能有used==0的结点,形成原因就是那个地方被墙隔开了,根本就没路进去)


---------------想把这个迷宫走超时,那地图还得蛮大的呢!


φ(゜▽゜*)♪
2016-09-23 22:41
qq826647235
Rank: 2
等 级:论坛游民
帖 子:37
专家分:10
注 册:2016-5-4
收藏
得分:0 
回复 2楼 书生牛犊
标记完递归回溯一层不用撤标记吗
2016-09-24 12:39
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 3楼 qq826647235
不能撤标记,一旦扯了标记就会陷入无限循环。

这里的迷宫问题不是路径问题,是判断是否联通问题。

不是说要让你遍历出所有可行的路径方法。你只要证明能走到终点就行了。所以所有结点最多只要使用1次。


[此贴子已经被作者于2016-9-27 13:31编辑过]


φ(゜▽゜*)♪
2016-09-27 13:09
快速回复:迷宫问题求教 怎么才能优化
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034790 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved