#include<bits/stdc++.h>
using namespace std;
const int N=2500;
int n,m,qx[N*N],qy[N*N],x,y;
char c[N][N];
bool f,a[N][N],vis[N][N];
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};
void bfs(int x0,int y0,int x2,int y2){
int h=0,t=0;
qx[t]=x0;
qy[t]=y0;
t++;
vis[x0][y0]=1;
while(h<t){
int cx=qx[h],cy=qy[h];
h++;
for(int i=0;i<4;i++){
int fx=cx+dx[i],fy=cy+dy[i];
if(fx>=1&&fx<=n&&fy>=1&&fy<=n&&a[fx][fy]!=a[cx][cy]&&!vis[fx][fy]){
if(fx==x2&&fy==y2){f=1;return;}
vis[fx][fy]=1;
qx[t]=fx;
qy[t]=fy;
t++;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>c[i][j];
a[i][j]=c[i][j]-'0';
}
}
for(int i=1;i<=m;i++){
cin>>x>>y;
int t=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==x&&j==y) continue;
bfs(x,y,i,j);
if(f) t++;
f=0;
memset(qx,0,sizeof(qx));
memset(qy,0,sizeof(qy));
memset(vis,0,sizeof(vis));
}
}
cout<<t+1<<endl;
}
return 0;
}
时间复杂度 O(n2m),求优化方法!!!