AcWing 3179. 穿越雷区
原题链接
简单
作者:
听风ᵎ
,
2021-04-01 17:49:02
,
所有人可见
,
阅读 327
(BFS)
C++ 代码
#include <iostream>
#include <queue>
using namespace std;
struct point{
int x;
int y;
int ts;
point(int a,int b){
x=a;
y=b;
}
};
int n;
char map[105][105];
bool vis[105][105];
int dir[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
int bfs(int x,int y){
queue<point> q;
point p(x,y);
p.ts =0;
q.push(p);
vis[x][y]=1;
while(!q.empty()){
point t=q.front();
q.pop();
if(map[t.x][t.y]=='B'){
return t.ts;
}
for(int i=0;i<4;i++){
int dx=t.x+dir[i][0];
int dy=t.y+dir[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<n&&!vis[dx][dy]&&map[t.x][t.y]!=map[dx][dy]){
point tt(dx,dy);
tt.ts=t.ts+1;
q.push(tt);
vis[dx][dy]=1;
}
}
}
return -1;
}
int main(){
int x,y;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>map[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(map[i][j]=='A'){
x=i;
y=j;
}
}
}
cout<<bfs(x,y);
return 0;
}