Max20121024 @ 2024-05-26 13:18:10
#include<bits/stdc++.h>
using namespace std;
int n,m,maze[1010][1010],dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},color[1010][1010],num[100010],x,y;
char ss;
queue<int> q;
int bfs(int x,int y){
if(color[x][y]!=0)return num[color[x][y]];
q.push(x);
q.push(y);
int cnt=0;
while(!q.empty()){
int ax=q.front();
q.pop();
int by=q.front();
q.pop();
color[ax][by]=m;
cnt++;
for(int i=0;i<4;i++){
int lx=ax+dx[i];
int ly=by+dy[i];
if(lx>0&&lx<=n&&ly>0&&ly<=n&&maze[lx][ly]!=maze[ax][by]&&color[lx][ly]==0){
q.push(lx);
q.push(ly);
}
}
}
return cnt;
}
int dfs(int x,int y,int cnt){
if(color[x][y]!=0)return num[color[x][y]];
color[x][y]=m;
for(int i=0;i<4;i++){
int lx=x+dx[i];
int ly=y+dy[i];
if(lx>0&&lx<=n&&ly>0&&ly<=n&&maze[lx][ly]!=maze[x][y]&&color[lx][ly]==0){
dfs(lx,ly,cnt+1);
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>ss;
maze[i][j]=ss-'0';
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<maze[i][j]<<' ';
// }
// cout<<endl;
// }
while(m--){
cin>>x>>y;
cout<<bfs(x,y);
}
}