谁能帮我看看到底错在哪?万分感谢
  • 板块P1141 01迷宫
  • 楼主Actx
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/5/14 17:10
  • 上次更新2023/10/28 01:27:58
查看原帖
谁能帮我看看到底错在哪?万分感谢
542115
Actx楼主2022/5/14 17:10
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mp[1001][1001];
int b[1001][1001];
bool visit[1001][1001];
int ans[10000001];
int k=0;
int fx[4]={1,0,0,-1},fy[4]={0,1,-1,0};
struct node{
	int x,y;
}dian;
queue<node> q;
void bfs(){
	while(q.size()){
		dian=q.front();
		q.pop();
		for(int i=0;i<4;++i){
			int tx=dian.x+fx[i];
			int ty=dian.y+fy[i];
			if(tx>n||tx<1||ty>n||ty<1||mp[dian.x][dian.y]==mp[tx][ty]||visit[tx][ty]==1){
				continue;
			}
			else{
				dian.x=tx;
				dian.y=ty;
				q.push(dian);
				visit[tx][ty]=1;
				b[tx][ty]=k;
				ans[k]++;
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	memset(visit,0,sizeof(visit));
	memset(b,0,sizeof(b));
	char ch;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			cin>>ch;
			mp[i][j]=ch;
		}
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			if(b[i][j]==0){
				++k;
				dian.x=i,dian.y=j;
				q.push(dian);
				visit[dian.x][dian.y]=1;
				b[dian.x][dian.y]=k;
				ans[k]++;
				bfs();
			}
		}
	}
	int xx,yy;
	for(int i=1;i<=m;++i){
		scanf("%d%d",&xx,&yy);
		cout<<ans[b[xx][yy]]<<endl;
	}
	return 0;
}
2022/5/14 17:10
加载中...