队头和队尾搞反了,抱歉。。。
by jifbt @ 2019-02-21 13:19:01
[记录](https://www.luogu.org/recordnew/show/16542877)已AC!
代码:
```cpp
#include<stdio.h>
#include<string.h>
int m,n,c[1000][1000],a,q[1000000][2],h,t;bool v[1000][1000];
int main() {
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++) for(int j=0;j<n;j++) scanf("%1d",&c[i][j]);//把j<n误为i<n
for(int i=0;i<m;i++) for(int j=0;j<n;j++) {
if(c[i][j]&&!v[i][j]) {//少了c[i][j]
memset(q,0,sizeof(q));
q[0][0]=i,q[0][1]=j,
h=0,t=-1,a++;
while(h>t) {
v[q[++t][0]][q[t][1]]=1;
if(q[t][0]) if(c[q[t][0]-1][q[t][1]]&&!v[q[t][0]-1][q[t][1]]) q[++h][0]=q[t][0]-1,q[h][1]=q[t][1];
if(q[t][1]) if(c[q[t][0]][q[t][1]-1]&&!v[q[t][0]][q[t][1]-1]) q[++h][0]=q[t][0],q[h][1]=q[t][1]-1;
if(q[t][0]!=m-1) if(c[q[t][0]+1][q[t][1]]&&!v[q[t][0]+1][q[t][1]]) q[++h][0]=q[t][0]+1,q[h][1]=q[t][1];
if(q[t][1]!=n-1) if(c[q[t][0]][q[t][1]+1]&&!v[q[t][0]][q[t][1]+1]) q[++h][0]=q[t][0],q[h][1]=q[t][1]+1;
}
}
}
printf("%d",a);
return 0;
}```
by jifbt @ 2019-02-21 17:36:18