难道是getchar的问题??有边界判断数组应该不会越界呀,运行结果也是对的
#include <utility>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int n;
typedef pair<int,int> PII;
queue<PII> q;
char g[1010][1010];
int d[1010][1010];
int x1,x2,Y1,y2;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};//上下左右
void bfs(int sx,int sy)
{
q.push({sx,sy});
d[sx][sy]=0;
while(!q.empty())
{
PII t=q.front();
q.pop(); //弹出队头
for(int i=0;i<4;i++)
{
int a=t.first+dx[i];
int b=t.second+dy[i]; //将要到达的坐标
if(a<1||a>n||b<1||b>n) continue; //先判断是否越界
if(g[a][b]=='1'||d[a][b]!=-1) continue; //再判断是否有障碍或已走过
q.push({a,b}); //坐标入队
d[a][b]=d[t.first][t.second]+1;
if(a==Y1&&b==y2) return;
}
}
}
int main(){
memset(d,-1,sizeof(d));
scanf("%d",&n);
getchar();
for(int i=1;i<=n;i++,getchar())
for(int j=1;j<=n;j++)
scanf("%c",&g[i][j]);
scanf("%d%d%d%d",&x1,&x2,&Y1,&y2);
bfs(x1,x2);
printf("%d",d[Y1][y2]);
}
结果就是清一色的紫……