liulechen @ 2024-12-29 13:55:36
#include<bits/stdc++.h>
using namespace std;
long long n,m,s,e,flag[1001][1001],vis[4][2]={-1,0,1,0,0,-1,0,1},v,ans[100001];
char arr[1001][1001];
struct node{
int x,y,step;
};
queue<node> q;
void bfs(){
q.push({s,e,0});
flag[s][e]=v;
while(!q.empty()){
for(int i=0;i<4;i++){
int xx=q.front().x+vis[i][0];
int yy=q.front().y+vis[i][1];
if(flag[xx][yy]==0 && xx>=1 && xx<=n && yy>=1 && yy<=n && arr[xx][yy]!=arr[q.front().x][q.front().y]){
flag[xx][yy]=v;
q.push({xx,yy,q.front().step+1});
}
}
q.pop();
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>arr[i][j];
}
}
while(m--){
v++;
cin>>s>>e;
if(flag[s][e]!=0){
cout<<ans[v];
continue;
}
bfs();
long long cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(flag[i][j]){
cnt++;
}
flag[i][j]=0;
}
}
ans[v]=cnt;
cout<<cnt<<endl;
}
}