80分
#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
using namespace std;
int n,m,u,v;
int maps[1005][1005],way[4][2] = {{1,0},{0,1},{-1,0},{0,-1}},dis[1005][1005];
bool vis[1005][1005];
string s;
queue <int> x1,y1;
void Bfs(int x,int y){
while(!x1.empty()){
x1.pop(),y1.pop();
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
vis[i][j] = 0;
}
}
int cnt = 0;
x1.push(x),y1.push(y);
vis[x][y] = 1;
while(!x1.empty()){
int o1 = x1.front(),o2 = y1.front();
vis[o1][o2] = 1;
x1.pop(),y1.pop();
for(int i=0;i<4;i++){
int os1 = o1 + way[i][0];int os2 = o2 + way[i][1];
if(!vis[os1][os2] && maps[os1][os2] != maps[o1][o2] && os1 <= n && os2 <= n && os2 >= 1 && os1 >= 1){
vis[os1][os2] = 1;
cnt++;
x1.push(os1),y1.push(os2);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(vis[i][j]){
dis[i][j] = cnt+1;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
cin >> s;
int l = s.length();
for(int j=0;j<l;j++){
maps[i][j+1] = s[j]-'0';
}
}
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
if(!dis[u][v]){
Bfs(u,v);
}
printf("%d\n",dis[u][v]);
}
return 0;
}
是联通块写错了吗?
大佬求调ORZ