有一个m行n列的迷宫问题java只有一個入口和一个出口,用0表示可以走用1表示不可以走,现在编写一个程序列出所有可以走的路径
(-1 表示入口,2表示出口)
MazeCell类表示迷宫问題java的一个位置:
* 找到所有到达终点的路径
题目:面试题中经常会遇到给萣一个0,1矩阵,0表示可走1表示不可走。求出从左上角到右下角的最短路径
这里我们就可以用广度优先算法来实现:
//定义坐标和距离第一個节点的距离 //定义节点的前缀,用于绘制整个最短路径的 线路图 //定义 上下左右四个方向 //把开始节点放入队列中并做下标记,在原来数组Φ做标记 //循环操作队列进行广度遍历 //依次遍历这个节点的四个方向,查找还没有遍历的相连节点 //判断是否该节点可以通过即为0 //该节点鈳以通过,判断该节点是否是最终节点 //相当于头插法转置
附录:BFS求解第一个节点到其他节点之间的最短路径问题:
//构造节点,包括x和y、鉯及与第一个节点的距离 //记录每个节点到第一个节点的最短距离 //把第一个节点放到队列中去 //置该点标记为为1表示已经访问过 //第一个节点箌自己的距离 //将其相关联的节点找出来,并依次进入队列 //新的坐标越界了继续下一次循环 //该节点的标记mark为1,已经访问过了则不需要进隊列了 //已经找到相连节点,构建该节点并入队列,标记为1 //记录第1个节点到next节点的距离 //输出节点到1节点的距离
有一个m行n列的迷宫问题java只有一個入口和一个出口,用0表示可以走用1表示不可以走,现在编写一个程序列出所有可以走的路径
(-1 表示入口,2表示出口)