AcWing 3179. 穿越雷区
原题链接
简单
作者:
女青不想秃头
,
2021-05-31 20:02:33
,
所有人可见
,
阅读 381
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int n;
char m[105][105];
int h[105][105];
typedef pair<int,int> P;
void bfs(int ax,int ay){
queue<P> q;
q.push({ax,ay});
//memset(h,-1,sizeof h);
h[ax][ay]=0;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
while(q.size()){
P t=q.front();
q.pop();
for(int i=0;i<4;i++){
int x=t.first+dx[i];
int y=t.second+dy[i];
if(x>=0&&x<n&&y>=0&&y<n&&m[x][y]!=m[t.first][t.second]&&h[x][y]==0x3f3f3f3f){
h[x][y]=min(h[x][y],h[t.first][t.second]+1);
q.push({x,y});
}
}
}
}
int main(){
cin>>n;
getchar();
int ax,ay,bx,by;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
m[i][j]=getchar();
getchar();
if(m[i][j]=='A'){
ax=i;
ay=j;
}else if(m[i][j]=='B'){
bx=i;
by=j;
}
}
}
memset(h,0x3f,sizeof h);
bfs(ax,ay);
if(h[bx][by]==0x3f3f3f3f)
cout<<"-1";
else
cout<<h[bx][by];
return 0;
}