欢迎使用markdown
by 斗神·君莫笑 @ 2018-07-18 09:18:37
```cpp
#include<cstdio>
#include<cstring>
using namespace std;
int head,tail;
int n,m,x,y,ans=1;
int d[10][10]={{0,1},{1,0},{0,-1},{-1,0}};
int a[10001][10001],c[10001][10001];
struct zb{
int xx; int yy;
}b[10001];
void bfs(int head,int tail){
while(head!=tail){
for(int i=0;i<4;i++){
if(c[b[head].xx+d[i][0]][b[head].yy+d[i][1]]==0 &&b[head].xx+d[i][0]>=1&&b[head].xx+d[i][0]<=n &&b[head].yy+d[i][1]>=1&&b[head].yy+d[i][1]<=n)
if((a[b[head].xx][b[head].yy]==0&&a[b[head].xx+d[i][0]][b[head].yy+d[i][1]]==1) ||(a[b[head].xx][b[head].yy]==1&&a[b[head].xx+d[i][0]][b[head].yy+d[i][1]]==0)){
b[tail].xx=b[head].xx+d[i][0];
b[tail].yy=b[head].yy+d[i][1];
tail++;
ans++;
c[b[head].xx+d[i][0]][b[head].yy+d[i][1]]==1;
}
}
head++;
}
printf("%d",ans);
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
b[1].xx=x;
b[1].yy=y;
c[x][y]=1;
ans=1;
head=1;
tail=2;
bfs(head,tail);
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
}
return 0;
}
```
@[单志远](/space/show?uid=38084) 帮了你一下
by rgq233666 @ 2018-07-18 09:31:54
自己看吧
```cpp
#include <bits/stdc++.h>
using namespace std;
long long n,m,ma[1001][1001],f[1001][1001]={},l,x,y;
int fx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char o;
struct Wu_Ren{
int i,j;
}q[1000001];
void bfs(int x1,int y1){
f[x1][y1]=1;
l++;
q[l].i=x1,q[l].j=y1;
for(int k=0;k<4;k++){
int xx=x1+fx[k][0],yy=y1+fx[k][1];
if(!f[xx][yy]&&xx<=n&&xx>=1&&yy<=n&&yy>=1&&ma[x1][y1]!=ma[xx][yy]) bfs(xx,yy);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){
cin>>o;
ma[i][j]=o-48;
}
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){
if(f[i][j]) continue;
l=0;
bfs(i,j);
for(int k=1;k<=l;k++) f[q[k].i][q[k].j]=l;
}
for(int i=1;i<=m;i++){
scanf("%d %d",&x,&y);
printf("%d\n",f[x][y]);
}
return 0;
```
by rgq233666 @ 2018-07-18 09:34:14