以下是代码:
#include <iostream>
#include <queue>
using namespace std;
const int MAXN = 1000035;
struct Node
{
int x;
int y;
}qp[MAXN];
queue<Node> q;
int n,m,ans,map[3535][3535],b[3535][3535],op2=1;
int dx[35] = {0,-1,1,0,0};
int dy[35] = {0,0,0,-1,1};
void bfs(int x,int y)
{
Node op;
b[x][y] = 1;
op.x = x,op.y = y,q.push(op);
while(!q.empty())
{
Node tmp = q.front();
for(int i=1;i<=4;i++)
{
Node new_node = tmp;
new_node.x += dx[i],new_node.y += dy[i];
if(new_node.x >= 1 && new_node.y >= 1 && new_node.x <= n && new_node.y <= n && b[new_node.x][new_node.y] == 0 && map[new_node.x][new_node.y] != map[tmp.x][tmp.y])
{
q.push(new_node);
b[new_node.x][new_node.y] = 1,qp[op2].x = new_node.x,qp[op2].y = new_node.y,op2++;
ans++;
}
}
q.pop();
}
b[x][y] = ans;
for(int i=1;i<op2;i++) b[qp[i].x][qp[i].y] = ans,qp[i].x = 0,qp[i].y = 0;
}
int main()
{
cin >> n >> m;
for(int i=1;i<=n;i++)
{
string s;
cin >> s;
for(int j=0;j<s.size();j++) map[i][j+1] = s[j] - '0';
}
for(int i=1;i<=m;i++)
{
int x = 0,y = 0;
cin >> x >> y;
if(b[x][y] != 0) cout << b[x][y] << endl;
else
{
ans = 1;
bfs(x,y);
cout << b[x][y] << endl;
}
}
return 0;
}