bfs走迷宫
package com.itheima.Test;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Point{
int x;
int y;
int step;
public Point() {
}
}
public class _BFS走迷宫 {
static int[][] map=new int[100][100];//地图
static int[][] visit=new int[100][100];//访问过的
static Queue<Point> queue=new LinkedList<>();//队列
public static int[] dx={0,1,0,-1};//右、下、左、上
public static int[] dy={1,0,-1,0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m,n;//行和列
m=sc.nextInt();
n=sc.nextInt();
for(int i=1;i<=m;i++){
for (int j = 1; j <=n ; j++) {
map[i][j]=sc.nextInt();//填充地图
}
}
int startx,starty;
startx=sc.nextInt();
starty=sc.nextInt();
int p,q;//终点
p=sc.nextInt();
q=sc.nextInt();
//bfs
Point point =new Point();
point.x=startx;
point.y=starty;
point.step=0;
queue.offer(point);//将起点入队
visit[startx][starty]=1;//从起点开始访问置为1
while(!queue.isEmpty()){//队列不为空,或者没有可扩展的点
int x=queue.peek().x;//取出队首的坐标
int y=queue.peek().y;
if(x==p&&y==q){
//对于bfs来说,所有路径同时进行谁先找到就是最短路径
System.out.println(queue.peek().step);
break;
}
//如果没有走到终点就是4个方向走
for(int k=0;k<3;k++){
int tx,ty;
tx=x+dx[k];
ty=y+dy[k];
//如果是没有障碍物并且没有访问过就入队
if(map[tx][ty]==1&&visit[tx][ty]==0){
Point temp = new Point();
temp.x=tx;
temp.y=ty;
temp.step=queue.peek().step+1;
queue.offer(temp);
visit[tx][ty]=1;//设置已访问
}
}
queue.poll();//拓展完了需要将队首元素出队
}
}
}