过长的代码:
#include<bits/stdc++.h>
using namespace std;
int n;
char c[105][105];
int dis[105][105];
int c1,r1,c2,r2;
int ans=1e9;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
bool f(int u,int v){
return u>0&&u<=n&&v>0&&v<=n&&c[u][v]!='x';
}
int main(){
for(int i=0;i<105;i++)
for(int j=0;j<105;j++)
dis[i][j]=1e9;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
cin>>c[i][j];
if(c[i][j]=='A')c1=i,r1=j;
else if(c[i][j]=='B')c2=i,r2=j;
}
queue<int> qx,qy,qz;
qx.push(c1);
qy.push(r1);
qz.push(0);
dis[c1][r1]=0;
while(!qx.empty()){
int nowx=qx.front(),nowy=qy.front(),nowz=qz.front();qx.pop();qy.pop();qz.pop();
if(nowx==c2&&nowy==r2){
if(ans>dis[nowx][nowy])
ans=dis[nowx][nowy];
}
else if(c[nowx][nowy]=='x'||dis[nowx][nowy]>=ans)continue;
else if(nowz==0)
for(int i=0;i<4;i++){
if(!f(nowx+dx[i],nowy+dy[i]))continue;
qx.push(nowx+dx[i]);
qy.push(nowy+dy[i]);
qz.push(i+1);
dis[nowx+dx[i]][nowy+dy[i]]=0;
}
else if(nowz==1){
if(f(nowx+dx[0],nowy+dy[0])&&dis[nowx][nowy]<dis[nowx+dx[0]][nowy+dy[0]]){
dis[nowx+dx[0]][nowy+dy[0]]=dis[nowx][nowy];
qx.push(nowx+dx[0]);
qy.push(nowy+dy[0]);
qz.push(1);
}
if(f(nowx+dx[1],nowy+dy[1])&&dis[nowx][nowy]+1<dis[nowx+dx[1]][nowy+dy[1]]){
dis[nowx+dx[1]][nowy+dy[1]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[1]);
qy.push(nowy+dy[1]);
qz.push(2);
}
if(f(nowx+dx[3],nowy+dy[3])&&dis[nowx][nowy]+1<dis[nowx+dx[3]][nowy+dy[3]]){
dis[nowx+dx[3]][nowy+dy[3]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[3]);
qy.push(nowy+dy[3]);
qz.push(4);
}
}else if(nowz==2){
if(f(nowx+dx[0],nowy+dy[0])&&dis[nowx][nowy]+1<dis[nowx+dx[0]][nowy+dy[0]]){
dis[nowx+dx[0]][nowy+dy[0]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[0]);
qy.push(nowy+dy[0]);
qz.push(1);
}
if(f(nowx+dx[1],nowy+dy[1])&&dis[nowx][nowy]<dis[nowx+dx[1]][nowy+dy[1]]){
dis[nowx+dx[1]][nowy+dy[1]]=dis[nowx][nowy];
qx.push(nowx+dx[1]);
qy.push(nowy+dy[1]);
qz.push(2);
}
if(f(nowx+dx[2],nowy+dy[2])&&dis[nowx][nowy]+1<dis[nowx+dx[2]][nowy+dy[2]]){
dis[nowx+dx[2]][nowy+dy[2]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[2]);
qy.push(nowy+dy[2]);
qz.push(3);
}
}else if(nowz==3){
if(f(nowx+dx[1],nowy+dy[1])&&dis[nowx][nowy]+1<dis[nowx+dx[1]][nowy+dy[1]]){
dis[nowx+dx[1]][nowy+dy[1]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[1]);
qy.push(nowy+dy[1]);
qz.push(2);
}
if(f(nowx+dx[2],nowy+dy[2])&&dis[nowx][nowy]<dis[nowx+dx[2]][nowy+dy[2]]){
dis[nowx+dx[2]][nowy+dy[2]]=dis[nowx][nowy];
qx.push(nowx+dx[2]);
qy.push(nowy+dy[2]);
qz.push(3);
}
if(f(nowx+dx[3],nowy+dy[3])&&dis[nowx][nowy]+1<dis[nowx+dx[3]][nowy+dy[3]]){
dis[nowx+dx[3]][nowy+dy[3]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[3]);
qy.push(nowy+dy[3]);
qz.push(4);
}
}else if(nowz==4){
if(f(nowx+dx[0],nowy+dy[0])&&dis[nowx][nowy]+1<dis[nowx+dx[0]][nowy+dy[0]]){
dis[nowx+dx[0]][nowy+dy[0]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[0]);
qy.push(nowy+dy[0]);
qz.push(1);
}
if(f(nowx+dx[2],nowy+dy[2])&&dis[nowx][nowy]+1<dis[nowx+dx[2]][nowy+dy[2]]){
dis[nowx+dx[2]][nowy+dy[2]]=dis[nowx][nowy]+1;
qx.push(nowx+dx[2]);
qy.push(nowy+dy[2]);
qz.push(3);
}
if(f(nowx+dx[3],nowy+dy[3])&&dis[nowx][nowy]<dis[nowx+dx[3]][nowy+dy[3]]){
dis[nowx+dx[3]][nowy+dy[3]]=dis[nowx][nowy];
qx.push(nowx+dx[3]);
qy.push(nowy+dy[3]);
qz.push(4);
}
}
}
if(ans==1e9)ans=-1;
cout<<ans;
return 0;
}