用的广搜 看了好久没看出来哪里有问题 代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>//abs(a)整数的绝对值
#include <queue>//fabc(a)小数的绝对值
#include <stack>
#include <map>
#include <cstdlib>
#include <ctime>
#include <unordered_map>
#include <climits>
#include <set>
#include <bitset>
using namespace std;
int n,m;
int xa,ya;
int a[1005][1005];
bool b[1005][1005];
int ans=1;
int xx[8]={-1,1,0,0};
int yy[8]={0,0,-1,1};
struct node{
int x,y;
};
int bfs(){
queue<node> q;
q.push(node{xa,ya});
while(q.size()){
node p=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=p.x+xx[i];
int ny=p.y+yy[i];
if(b[nx][ny]==0 && a[p.x][p.y]!=a[nx][ny] && nx>=1 && nx<=n && ny>=1 && ny<=m){
b[nx][ny]=1;
q.push(node{nx,ny});
ans++;
}
}
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%1d",&a[i][j]);
}
}
for(int i=1;i<=m;i++){
scanf("%d%d",&xa,&ya);
memset(b,0,sizeof(b));
b[xa][ya]=1;
ans=1;
printf("%d\n",bfs());
}
return 0;
}