之前使用prim生成迷宫后,想加一个寻找最短路径的算法,但是使用bfs算法计算走出最少需要多少步还算比较简单,但是如何记录那条最短路径却难到我了。
一个比较常见的思路是记录每个节点的父节点,然后从终点一直往前寻找他们的父节点,找到起点时停止。
BFS(广度优先算法)
这里是新建了一个宽高和迷宫地图一样的数组来存储相应位置上的父节点。
整个过程相当于一个树的分叉,如果有一个分叉找到终点,就一层一层的来找它们的父节点,形成路径。(下面的示意图源于网络,主要是体现那种树的结构)
BFS寻路部分 代码:
完整Java代码:
import java.awt.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class MazeBfs {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入宽和高:");
int width = sc.nextInt();
int height = sc.nextInt();
System.out.println("迷宫宽为:" + width + ",高为:" + height);
int[][] mazearr = new int[2 * width + 1][2 * height + 1];//动态初始化
// mazearr.length 宽 mazearr[0].length) 高
for (int i = 0; i < mazearr.length; i++) { //行
for (int j = 0; j < mazearr[0].length; j++) {
if (i%2==0 || j%2 ==0){