AcWing 3179. 穿越雷区
原题链接
简单
作者:
术
,
2021-04-07 15:49:55
,
所有人可见
,
阅读 309
`#include <iostream>
#include <queue>
using namespace std;
const int N=105;
char a[N][N];
int xa,ya,xb,yb;
int dx[4]= {0,1,0,-1},dy[4]= {1,0,-1,0};
int n;
bool st[N][N];
struct Edge
{
int x,y,w;
Edge(int x,int y,int w)
{
this->x=x;
this->y=y;
this->w=w;
}
};
int bfs()
{
queue<Edge> q;
q.push(Edge(xa,ya,0));
st[xa][xb]=true;
while(!q.empty())
{
Edge t=q.front();
q.pop();
for(int i=0; i<4; i++)
{
int u=t.x+dx[i],v=t.y+dy[i];
if(u<=0||u>n||v<=0||v>n)
continue;
if(st[u][v])
continue;
if(a[t.x][t.y]==a[u][v])
continue;
if(a[u][v]=='B') return t.w+1;
st[u][v]=true;
q.push(Edge(u,v,t.w+1));
}
}
return -1;
}
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
cin>>a[i][j];
if(a[i][j]=='A')
xa=i,ya=j;
if(a[i][j]=='B')
xb=i,yb=j;
}
cout<<bfs();
//cout << "Hello world!" << endl;
return 0;
}
`