```cpp
#include <bits/stdc++.h>
#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);
for(int i=1;i<=n;i++){
string s;
cin>>s;
for(int j=1;j<=n;j++){
g[i][j]=s[j-1];
}
}
scanf("%d%d%d%d",&x1,&x2,&Y1,&y2);
bfs(x1,x2);
printf("%d",d[Y1][y2]);
}
```
@[Chinami_Nagisa](/user/1152154)
就是getchar的问题
by lovely_codecat @ 2024-08-12 10:44:51
@[lovely_codecat](/user/775975)
所以这样频繁调用getchar会有什么影响??
by Chinami_Nagisa @ 2024-08-12 10:52:19
确实是 getchar RE 了
因为测试数据里的windows格式换行符实际上是两个字符 /r/n
虽然NOI系列赛事用的linux下的换行符确实是一个,但是建议使用更可靠的读入字符,比如:
scanf("%s") 读入字符串
或者 scanf(" %c") 读入,前面加一个空格就可以跳过所有不可见字符
by complexor @ 2024-08-12 10:57:19
```cpp
#include <bits/stdc++.h>
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);
for(int i=1;i<=n;i++)
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]);
return 0;
}
```
@[Chinami_Nagisa](/user/1152154)
by yangjinxuan123456 @ 2024-08-24 16:57:23