#include <bits/stdc++.h>
using namespace std;
int n,m,ans[1001][1001];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
bool M[1001][1001],flag[1001][1001];
struct Node{
int x;
int y;
}G[1001*1001];
void BFS(int start_x,int start_y){
int head=0,tail=0,sum_n=1,sum_s=1;
memset(flag,0,sizeof(flag));
G[tail++]={start_x,start_y};
flag[start_x][start_y]=true;//①
while(head<tail){
int sx=G[head].x,sy=G[head++].y;
for(int i=0;i<4;i++){
int x1=sx+dx[i];
int y1=sy+dy[i];
if(x1>n||x1<=0||y1>n||y1<=0||flag[x1][y1]==true||M[x1][y1]==M[sx][sy])continue;
sum_n++;
flag[x1][y1]=1;
G[tail++]={x1,y1};
sum_s++;
}
}
for(int u=0;u<=tail-1;u++){
ans[G[u].x][G[u].y]=sum_s;
}
}
int main(){
char x;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>x;
if(x=='1'){
M[i][j]=true;
}
else if(x=='0'){
M[i][j]=false;
}
}
}
for(int o=1;o<=m;o++){
int i,j;
cin>>i>>j;
if(ans[i][j]==0){
BFS(i,j);
cout<<ans[i][j]<<endl;
}
else cout<<ans[i][j]<<endl;
}
return 0;
}
有无大佬解释一下?