诶嘿awa
#include<bits/stdc++.h>
#define N 110
using namespace std;
int n,ans,x,y,p[N][N];
struct node{
int x,y,val,fx;
node(int q,int w,int e,int r)
{
x=q; y=w; val=e; fx=r;
}
};
queue<node> q;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char c; cin>>c;
if(c=='x') p[i][j]=-1;
if(c=='A') q.push(node(i,j,1,0));
if(c=='B') {x=i; y=j;}
}
}
while(!q.empty())
{
node nd=q.front(); q.pop();
if(nd.fx==1)
{
for(int i=nd.y-1;i>=1;i--)
{
if(p[nd.x][i]==0)
{
q.push(node(nd.x,i,nd.val,1));
p[nd.x][i]=nd.val;
}
else break;
}
for(int i=nd.y+1;i<=n;i++)
{
if(p[nd.x][i]==0)
{
q.push(node(nd.x,i,nd.val,1));
p[nd.x][i]=nd.val;
}
else break;
}
if(p[nd.x+1][nd.y]==0&&nd.x<n)
{
q.push(node(nd.x+1,nd.y,nd.val+1,2));
p[nd.x+1][nd.y]=nd.val+1;
}
if(p[nd.x-1][nd.y]==0&&nd.x>1)
{
q.push(node(nd.x-1,nd.y,nd.val+1,2));
p[nd.x-1][nd.y]=nd.val+1;
}
}
else if(nd.fx==2)
{
for(int i=nd.x-1;i>=1;i--)
{
if(p[i][nd.y]==0)
{
q.push(node(i,nd.y,nd.val,2));
p[i][nd.y]=nd.val;
}
else break;
}
for(int i=nd.x+1;i<=n;i++)
{
if(p[i][nd.y]==0)
{
q.push(node(i,nd.y,nd.val,2));
p[i][nd.y]=nd.val;
}
else break;
}
if(p[nd.x][nd.y+1]==0&&nd.y<n)
{
q.push(node(nd.x,nd.y+1,nd.val+1,1));
p[nd.x][nd.y+1]=nd.val+1;
}
if(p[nd.x][nd.y-1]==0&&nd.y>1)
{
q.push(node(nd.x,nd.y-1,nd.val+1,1));
p[nd.x][nd.y-1]=nd.val+1;
}
}
else
{
for(int i=nd.y-1;i>=1;i--)
{
if(p[nd.x][i]==0)
{
q.push(node(nd.x,i,nd.val,1));
p[nd.x][i]=nd.val;
}
else break;
}
for(int i=nd.y+1;i<=n;i++)
{
if(p[nd.x][i]==0)
{
q.push(node(nd.x,i,nd.val,1));
p[nd.x][i]=nd.val;
}
else break;
}
for(int i=nd.x-1;i>=1;i--)
{
if(p[i][nd.y]==0)
{
q.push(node(i,nd.y,nd.val,2));
p[i][nd.y]=nd.val;
}
else break;
}
for(int i=nd.x+1;i<=n;i++)
{
if(p[i][nd.y]==0)
{
q.push(node(i,nd.y,nd.val,2));
p[i][nd.y]=nd.val;
}
else break;
}
}
}
if(p[x][y]!=-1) cout<<p[x][y]-1;
else cout<<-1;
return 0;
}