我用的BFS,但错了。
#include<bits/stdc++.h>
using namespace std;
struct zz{
int x,y,t,f;
};
int n,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1},qx,qy,zx,zy,minn=1000000000,v[101][101];
char c[101][101],lx;
queue<zz> q;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>lx;
if(lx!=' ')
{
c[i][j]=lx;
if(c[i][j]=='A')
{
qx=i;
qy=j;
}
if(c[i][j]=='x')
{
v[i][j]=1;
}
}
}
}
zz no;
for(int i=0;i<4;i++){
no.x=qx+dx[i];
no.y=qy+dy[i];
no.t=0;
no.f=i;
if(no.x>=1&&no.x<=n&&no.y>=1&&no.y<=n&&c[no.x][no.y]!='x'&&v[no.x][no.y]==0)
{
q.push(no);
v[no.x][no.y]=1;
}
}
v[qx][qy]=1;
while(!q.empty()){
for(int i=0;i<4;i++){
zz now;
now.x=q.front().x+dx[i];
now.y=q.front().y+dy[i];
if(i!=q.front().f)
{
now.t=q.front().t+1;
now.f=i;
}
if(now.x>=1&&now.x<=n&&now.y>=1&&now.y<=n&&v[now.x][now.y]==0)
{
v[now.x][now.y]=1;
q.push(now);
if(c[now.x][now.y]=='B')
{
minn=min(minn,now.t);
}
}
}
q.pop();
}
cout<<-1;
return 0;
}