@[栾竹清影](/user/288716) 教你个`scanf`读入字符的小技巧
```cpp
scanf("%c",&x);
```
改为
```cpp
scanf(" %c",&x);
```
会自动过滤之前的空格和换行符
by 童年如作业 @ 2020-04-21 10:28:52
AC代码:
```
#include <bits/stdc++.h>
using namespace std;
struct p
{
int x,y;
} W,M;
queue<p>q;
int a[1001][1001];
bool k[10000][10000];
int p[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
void BFS()
{
int len=1,ans=0;
while(!q.empty())
{
for(int i=0; i<len; i++)
{
if(q.front().x==W.x&&q.front().y==W.y)
{
printf("%d",ans);
return ;
}
for(int i=0; i<4; i++)
{
if(a[q.front().x+p[i][0]][q.front().y+p[i][1]]&&!k[q.front().x+p[i][0]][q.front().y+p[i][1]])
{
M.x=q.front().x+p[i][0];
M.y=q.front().y+p[i][1];
q.push(M);
k[M.x][M.y]=1;
}
}
q.pop();
}
ans++;
len=q.size();
}
}
int main()
{
int n;
char x;
cin>>n;
getchar();
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
cin>>x;
a[i][j]=(x=='0');
}
getchar();
}
cin>>M.x>>M.y>>W.x>>W.y;
q.push(M);
k[M.x][M.y]=1;
BFS();
return 0;
}
```
8WA两RE代码:
```
#include <bits/stdc++.h>
using namespace std;
struct p
{
int x,y;
} W,M;
queue<p>q;
int a[1001][1001];
bool k[10000][10000];
int p[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
void BFS()
{
int len=1,ans=0;
while(!q.empty())
{
for(int i=0; i<len; i++)
{
if(q.front().x==W.x&&q.front().y==W.y)
{
printf("%d",ans);
return ;
}
for(int i=0; i<4; i++)
{
if(a[q.front().x+p[i][0]][q.front().y+p[i][1]]&&!k[q.front().x+p[i][0]][q.front().y+p[i][1]])
{
M.x=q.front().x+p[i][0];
M.y=q.front().y+p[i][1];
q.push(M);
k[M.x][M.y]=1;
}
}
q.pop();
}
ans++;
len=q.size();
}
}
int main()
{
int n;
char x;
scanf("%d",&n);
getchar();
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
scanf("%c",&x);
a[i][j]=(x=='0');
}
getchar();
}
scanf("%d%d%d%d",&M.x,&M.y,&W.x,&W.y);
q.push(M);
k[M.x][M.y]=1;
BFS();
return 0;
}
```
抱歉抱歉忘记放代码了QwQ
只有中间的读入有区别…
by lzqy_ @ 2020-04-21 10:32:06
滥用 $\LaTeX$ 差评。
by Aw顿顿 @ 2020-04-21 10:34:03
```
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
scanf("%c",&x);
a[i][j]=(x=='0');
}
getchar();
}
```
改成
```
for(int i=1; i<=n; i++)
{
scanf("%s",x);
for(int j=1; j<=n; j++)
{
a[i][j]=(x[j-1]=='0');
}
}
```
就可以AC了
by Trinitrotoluene @ 2020-04-21 10:36:00
?这么神奇吗,我去试一下
(谢谢大佬提点)
by lzqy_ @ 2020-04-21 10:37:08
果然欸!
请问原理是什么呢?@[Trinitrotoluene](/user/141555)
by lzqy_ @ 2020-04-21 10:41:50
```cpp
scanf("%c",&x);
a[i][j]=(x=='0');
```
改成
```cpp
scanf("%1d",&x);
a[i][j]=(!x);
```
by Na2PtCl6 @ 2020-04-21 10:42:28
改成
```
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
scanf("%c",&x);
a[i][j]=(x=='0');
}
getchar();getchar();
}
```
也可对9个点
by Trinitrotoluene @ 2020-04-21 10:42:29
@[栾竹清影](/user/288716) windows 下的数据的换行符是 '/r/n',getchar() 只能读入 '/r' 而不能读入 '/n',就会导致答案错误
by Trinitrotoluene @ 2020-04-21 10:44:41
哦,就是说换行有两个符号……
那为什么两个getchar只能拿90分呢?还有一个点是……
by lzqy_ @ 2020-04-21 10:46:54