rt,求助
代码如下,把dx,dy改为{1,0,0,-1},{0,-1,1,0}即可AC
#include<bits/stdc++.h>//第一次
using namespace std;
int n,a[110][110],b,c,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
queue<pair<int,int> >q;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char ch;
cin>>ch;
if(ch=='A'){
a[i][j]=1;
q.push(make_pair(i,j));
}
if(ch=='B') b=i,c=j;
if(ch=='x') a[i][j]=-1;
}
}
while(!q.empty()){
int x=q.front().first,y=q.front().second;
if(x==b&&y==c){
break;
}
q.pop();
for (int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
while(nx<=n&&nx>=1&&ny<=n&&ny>=1&&a[nx][ny]==0){
a[nx][ny]=a[x][y]+1;
q.push(make_pair(nx,ny));
nx=nx+dx[i],ny=ny+dy[i];
}
}
}
cout<<max(a[b][c]-2,-1);
return 0;
}
#include<bits/stdc++.h>//第二次
using namespace std;
int n,a[110][110],b,c,dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
queue<pair<int,int> >q;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char ch;
cin>>ch;
if(ch=='A'){
q.push(make_pair(i,j));
a[i][j]=1;
}
if(ch=='x') a[i][j]=-1;
if(ch=='B') b=i,c=j;
}
}
while(!q.empty()){
int x=q.front().first,y=q.front().second;
if(x==b&&y==c){
break;
}
q.pop();
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
while(nx<=n&&nx>=1&&ny<=n&&ny>=1&&a[nx][ny]==0){
q.push(make_pair(nx,ny));
a[nx][ny]=a[x][y]+1;
nx+=dx[i],ny+=dy[i];
}
}
}
cout<<max(-1,a[b][c]-2);
return 0;
}