RE真的陪我一辈子

P1746 离开中山路

```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


|