woscxk @ 2024-07-26 19:42:49
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,step;
bool _t;
};
queue<node> que;
node dab(int x,int y,int step,bool _t){
node m;
m.x=x;
m.y=y;
m.step=step;
m._t=_t;
return m;
}
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int n,m;
int query[100001][2];
bool maps[1001][1001],vis[1001][1001];
int bfs(int x,int y){
int cnt=0;
cnt++;
vis[x][y]=1;
que.push(dab(x,y,0,maps[x][y]));
while(1){
node t=que.front();
que.pop();
int cnt2=0;
for(int i=0;i<4;i++){
int xx=t.x+dx[i],yy=t.y+dy[i];
//cout<<t._t;
if(xx<n&&xx>=0&&yy<n&&yy>=0&&(maps[xx][yy]==!t._t)&&(!vis[xx][yy])){
cout<<xx<<' '<<yy<<'\n';
cnt2++;
cnt++;
vis[xx][yy]=1;
que.push(dab(xx,yy,t.step+1,!t._t));
}
}
if(!cnt2)break;
}
memset(vis,0,sizeof(vis));
return cnt;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)for(int j=0;j<n;j++)scanf("%1d",&maps[i][j]);
for(int i=0;i<m;i++)cin>>query[i][0]>>query[i][1];;
for(int i=0;i<m;i++)cout<<bfs(query[i][0]-1,query[i][1]-1)<<'\n';
}