AcWing 844. 走迷宫
原题链接
简单
作者:
Acvv_scl
,
2021-03-06 19:04:06
,
所有人可见
,
阅读 253
import java.util.*;
public class Main{
static int N=110;
static int[][]g=new int[N][N];
//记录路径
static Pair[][]pre=new Pair[N][N];
static Pair[]q=new Pair[N*N];
static int n;
static int m;
static class Pair{
int key;
int value;
public Pair(int x,int y){
key=x;
value=y;
}
}
static int bfs(){
//队头
int hh=0;
//队尾
int tt=0;
//将顶点{0,0}加入到队列
q[0]=new Pair(0,0);
//从顶点开始广搜
g[0][0]=0;
//四个方向 搜索;
int []dx={-1,0,1,0};
int []dy={0,1,0,-1};
//如果队列不空
while(hh<=tt){
//取出队头
Pair p=q[hh++];
for(int i =0;i<4;i++){
int x=p.key+dx[i];
int y=p.value+dy[i];
//查询下一个点是否合法
if(x>=0&&y>=0&&x<n&&y<m&&g[x][y]==0){
g[x][y]=g[p.key][p.value]+1;
pre[x][y]=p;
q[++tt]=new Pair(x,y);
}
}
}
int x=n-1;
int y=n-1;
while(x!=0||y!=0){
Pair p=pre[x][y];
x=p.key;
y=p.value;
//输出路径
// System.out.println(x+":"+y);
}
return g[n-1][m-1];
}
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
g[i][j]=sc.nextInt();
}
}
System.out.println(bfs());
}
}