BFS宽度优先搜索:应用最多的就是走迷宫问题
例如:给出一个5*5迷宫图
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
如上图的迷宫,入口,出口分别:左上角,右下角
"1"是墙壁,"0"是通路
求从左上角到右下角最短需要走多少步?
问题分析:
首先需要将每个点包装成一个节点 x,y,deep
x:代表横坐标 y:代表纵坐标 deep:代表该点的深度(相当于是步数)
1、在走的过程中肯定不能走之前走过的(题目求的为最短),所以需要一个数组来标记该点是否被走过.
2、在走的过程中,需要判断能不能移动
1、不能走出去 2、走的点必须是没有走过的点 3、这个点是否能走
3、在满足2的条件下,将该点加入到队列(queue)当中
4、判断是否已经走到了终点。如果已经到达了终点,结束程序
代码:
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 图的bfs_迷宫 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = 5;
int n = 5;
int[][] graph = new int[m][n];
int[][] vis = new int[m][n];//标记哪些点已经被访