第8个点错了www
数据下载后,我的程序输出23,标解22,但是我手算模拟了一下实在找不到22的路径了。
#include <bits/stdc++.h>
using namespace std;
int n,bx,by,ex,ey;
char c[105][105];
int rea[105][105];
const int dx[]={0,-1,0,1,0};
const int dy[]={0,0,1,0,-1};
struct node{
int x,y,s,to;
};
queue <node> A;
int main(){
memset(rea,0x3f,sizeof(rea));
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cin>>c[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
if(c[i][j]=='A') bx=i,by=j;
else if(c[i][j]=='B') ex=i,ey=j;
}
node temp,now;
temp.x=bx,temp.y=by,temp.s=0;
rea[bx][by]=0;
temp.to=1;
A.push(temp);
temp.to=2;
A.push(temp);
temp.to=3;
A.push(temp);
temp.to=4;
A.push(temp);
int nx,ny;
while(!A.empty()){
temp=A.front();
A.pop();
// printf("%d %d %d %d\n",temp.s,temp.to,temp.x,temp.y);
nx=temp.x+dx[temp.to];
ny=temp.y+dy[temp.to];
if(c[nx][ny]!='x'&&nx>=1&&ny>=1&&nx<=n&&ny<=n&&temp.s<rea[nx][ny]){
now.s=temp.s;
now.to=temp.to;
now.x=nx;
now.y=ny;
rea[nx][ny]=temp.s;
A.push(now);
}
if(temp.to==1) now.to=4;
else now.to=temp.to-1;
nx=temp.x+dx[now.to];
ny=temp.y+dy[now.to];
if(c[nx][ny]!='x'&&nx>=1&&ny>=1&&nx<=n&&ny<=n&&temp.s+1<rea[nx][ny]){
now.s=temp.s+1;
now.x=nx;
now.y=ny;
rea[nx][ny]=temp.s+1;
A.push(now);
}
if(temp.to==4) now.to=1;
else now.to=temp.to+1;
nx=temp.x+dx[now.to];
ny=temp.y+dy[now.to];
if(c[nx][ny]!='x'&&nx>=1&&ny>=1&&nx<=n&&ny<=n&&temp.s+1<rea[nx][ny]){
now.s=temp.s+1;
now.x=nx;
now.y=ny;
rea[nx][ny]=temp.s+1;
A.push(now);
}
}
if(rea[ex][ey]>1e9){
printf("-1");
return 0;
}
else printf("%d",rea[ex][ey]);
return 0;
}
输入:
32
x . x . x . x x . . . . . x x . x x x x . x . . x . . . x x x x
x . . . x x x x . x x . . . x . . . x . . . . . x x . . x x . x
x x x . x . . . x . x . . . . x . x . . . x x x x x x x . . . .
x x . . x . x x x x x x . x x . x . x . . x x x . B . . . x . .
. x x x x x . x . . . . x x . x . . . . . . x x . x x . x . . x
x x x . . x . x x . x x . x . x . x x . . . x x . . x . x x x x
x . x x x x . . x . . . x x x . . x . . . . x x x . . x x . x x
x . . x x . . . x . . . x x x x . . x x x x . . . x . . x x . .
. x . . . . x . x x . . x x . x x x . . x x . x . x x . . . x x
x x . x x . x . . . x x . . . . . . . . . x x . . . x . . x . x
. . . x x x . x x x x . . . x x x x x . x . . x . . x . . . x x
x . . . . x x x . . . . x . x . x x . x x . x x . x . . x . x .
x x x . x . x x . . x . . . . x x x x . . x x . x x . . . x . x
x x x x x x . . . . x . . x . x x x . x x . . . . . . . x x . x
. . . x . x . . . . x x x x x x x . . x . . . . x x . . . . . .
x x x x x . . . x x . x . . . . . . x x . x . x x . x x x . x x
. . x x x x . . . x x x . x . x x x x . . . . . x x . . . x x x
x . x . . . . x x . x x x x x . x x . . . x . x x . . x x x . x
x . x . . x . x . . x . . . x x x . x . x . x x . x x x x x . .
x x x x . . x x . x . x . x x . x . x . . x x x x . . x x x x x
x . x . x x . . . x . . x . x . x x . x . . . . . x x . . x . x
x x x . . . . x x . x . x . x . . x . . x x x . . . . x . . . .
. x . x x x . x x x x x x x . x x . . x x x . . . x . x . . x x
. x . x x x x . . . x . . x . . x x . x x . . x . x . x . x x x
x x x x x . . x . . x x x . x x . . . x . x . . x . . . . x x x
x . x x x x . x x . x x x x . . . x x x . x x . x . . x . x x .
x . x . . x . x x . . x . . x . x . x . . . x x x x . . x x x x
. x x x . . . x . . x . . x x x x x . . x . x . . x . . x x . x
. . x x . . . x . x . x . x . . . x x . x x . x . x x . . . . x
x x . x x . x x x . x . x . . . x x x . x x . x . x x x x . . .
x x x . x x x x x x x . x . . . x x . x . x x . . . . . x x . .
x . . x . x . . . x . . x x . x x . . . . x . x x x x . . x . A
输出:22