Java 分别用栈dfs和队列bfs解决走迷宫问题
题目
走迷宫。
一个迷宫如图所示,他有一个入口和一个出口,其中白色单元表示通路,黑色单元表示不通路。试寻找一条从入口到出口的路径,每一部只能从一个白色单元走到相邻的白色单元,直至出口。分别用栈和队列求解问题。
栈的解法
首先写一个Point类来方便保存每个点的xy值,并且方便表示上下左右各个方向的点。
1 |
|
栈进行dps的思路就是使用回溯法,遇到分岔路的时候,选择一条走到底;若遇到死胡同就回溯到上一个分岔路,选择另外一条路线,直到走到出口为止。
最后栈所保存的元素就是路径上的每一个点了。
代码如下:
1 | public static String solveByStack(int maze[][],Point entrance,Point exit){ |
队列的解法
队列同样也要用到Point类,代码同上。
使用队列进行bfs的思路就是,一层层的往下搜索。
具体方法为:
(1) 将从入口开始的相邻可通元素入队。
(2) 出队首元素,再将其相邻未曾入队的元素入队。
(3) 重复操作(2),直到找到出口。
这样就有一个问题:该如何记录路径?
这里可以采用增加一个数组来保存经过的节点的前驱结点。
最后从出口可以,根据节点的前驱结点就可以找出完整的路径了。
代码如下:
1 | public static String solveByQueue(int maze[][],Point entrance,Point exit){ |
测试代码
1 | package lab3.Maze; |
参考文章
Java 分别用栈dfs和队列bfs解决走迷宫问题