AcWing 3179. 穿越雷区
原题链接
简单
作者:
物竞天择
,
2021-03-11 16:26:54
,
所有人可见
,
阅读 352
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110;
int n,s_x,s_y,e_x,e_y,h,t;
char w[N][N];
bool fl[N][N];
struct que{
int x,y,dist;
char c;
} q[N*N];
///广搜,自写队列
void bfs(){
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
h=1,t=1;//头尾指针
q[t].x=s_x,q[t].y=s_y,q[t].dist=0;
q[t].c=' ';
fl[s_x][s_y]=true;
t++;
while(h<t){
if(q[h].x==e_x&&q[h].y==e_y){
cout<<q[h].dist<<endl;
return;
}
for(int i=0;i<4;i++){
int u=q[h].x+dx[i],v=q[h].y+dy[i];
if(u<1||u>n||v<1||v>n||w[u][v]==q[h].c||fl[u][v]) continue;
q[t].x=u,q[t].y=v,q[t].c=w[u][v];
q[t].dist=q[h].dist+1;
fl[u][v]=true;///最容易忘记!!!!!写到for循环外就错了
t++;
}
h++;
}
cout<<-1<<endl;
return;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>w[i][j];
if(w[i][j]=='A'){
s_x=i;
s_y=j;
}
if(w[i][j]=='B'){
e_x=i;
e_y=j;
}
}
}
bfs();
return 0;
}