50,780
社区成员
发帖
与我相关
我的任务
分享
#include <bits/stdc++.h>
#define MOD 1000000007
#define INF 0x7f7f7f7f
using namespace std;
typedef long long LL;
const int dx[]= {1,0,-1,0};
const int dy[]= {0,1,0,-1};
int n,ax,ay,bx,by,flag,ans;
char a[105][105];
int vis[105][105];
struct node {
int x,y,dis;
node(int x,int y,int dis):x(x),y(y),dis(dis) {}
};
void bfs() {
queue<node> q;
node u(ax,ay,-1);
q.push(u);
vis[u.x][u.y]=1;
while(!q.empty()) {
node u=q.front();
q.pop();
if(u.x==bx&&u.y==by) {
ans=min(ans,u.dis);
flag=1;
return;
}
for(int i=0; i<4; i++) {
int nx=u.x+dx[i];
int ny=u.y+dy[i];
int ndis=u.dis+1;
while(nx>=1 && nx<=n && ny<=n && ny>=1 && a[nx][ny]!='x') {
if(!vis[nx][ny]) {
vis[nx][ny]=1;
q.push(node(nx,ny,ndis));
}
nx+=dx[i];
ny+=dy[i];
}
}
}
}
int main() {
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>a[i][j],getchar();
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) {
if(a[i][j]=='A') ax=i,ay=j;
if(a[i][j]=='B') bx=i,by=j;
}
ans=INF;
bfs();
if(flag) cout<<ans<<endl;
else cout<<-1<<endl;
return 0;
}