51,716
社区成员




#include<bits/stdc++.h>
using namespace std;
const int N = 1001;
char s[N][N];
int lx,ly,fx,fy,n;
int vis[N][N][4],dis[N][N][4];
struct node{
int x,y,num;
};
int dx[]={1,-1,0,0};
int dy[]={0,0,-1,1};
bool pd(int x,int y)
{
if(x<1||y<1||x>n||y>n||s[x][y]=='x')
{
return true;
}
return false;
}
void spfa()
{
queue<node>q;
memset(dis,0x3f3f3f3f,sizeof(dis));
for(int i=0;i<4;i++)
{
q.push({lx,ly,i});
dis[lx][ly][i]=0;
}
while(q.size())
{
node t=q.front();
q.pop();
vis[t.x][t.y][t.num]=0;
for(int i=0;i<4;i++)
{
int xx=t.x+dx[i],yy=t.y+dy[i];
if(pd(xx,yy))
{
continue;
}
int dd=(i!=t.num);
if(dis[xx][yy][i]>dis[t.x][t.y][t.num]+dd)
{
dis[xx][yy][i]=dis[t.x][t.y][t.num]+dd;
if(vis[xx][yy][i]==0)
{
q.push({xx,yy,i});
vis[xx][yy][i]=1;
}
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>s[i][j];
if(s[i][j]=='A')
{
lx=i;
ly=j;
}
if(s[i][j]=='B')
{
fx=i;
fy=j;
}
}
}
spfa();
int sum=0x3f3f3f3f;
for(int i=0;i<4;i++)
{
sum = min(sum,dis[fx][fy][i]);
}
if(sum==0x3f3f3f3f)
{
cout<<"-1";
}
else
{
cout<<sum;
}
return 0;
}