第二个测试点有问题, 救命!
#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}},b[1005][1005],c[100005];
int ans,n;
struct DOT {
int x,y;
} d1,d2,d3;
void bfs(int si,int sj)
{
int s=1;
ans++;
queue<DOT> q;
d1.x=si;
d1.y=sj;
q.push(d1);
b[si][sj]=ans;
while (!q.empty())
{
d2=q.front();q.pop();
for (int j=0;j<4;j++)
{
int ni=d2.x+d[j][0];
int nj=d2.y+d[j][1];
if (ni>0&&ni<=n&&nj>0&&nj<=n&&b[ni][nj]==0&&a[d2.x][d2.y]!=a[ni][nj])
{
d3.x=ni;d3.y=nj;
q.push(d3);
b[ni][nj]=ans;
s++;
}
}
}
c[ans]=s;
}
int main() {
freopen("P1141_2.in","r",stdin);
freopen("P1141_2.txt","w",stdout);
int m,i,j,x,y;
cin>>n>>m;
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) {
cin>>a[i][j];
}
}
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) {
if(b[i][j]==0)
{
bfs(i,j);
}
}
}
for(int i=1;i<=m;i++)
{
cin>>x>>y;
cout<<c[b[x][y]]<<endl;
}
return 0;
}
测试点放在下面了(输入) 链接: 百度网盘链接 提取码: xq3u