80分求助
  • 板块P1141 01迷宫
  • 楼主无秒
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/10/9 16:20
  • 上次更新2023/11/5 11:28:19
查看原帖
80分求助
43550
无秒楼主2020/10/9 16:20

第二个点和第十个点WA了,但是不知道为啥,自我感觉这个搜索没毛病啊qwq.

基本思想就是bfs搜然后加上连通块

#include <cstdio>
#include <queue>
using namespace std;
int a[1001][1001],b[1001][1001],sum[1001];
int n,m,cnt,ans;
const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
queue<int> qx,qy;
inline void bfs(){
	int X,Y,x,y;
	while(!qx.empty()){
		x=qx.front(),y=qy.front();qx.pop(),qy.pop();
		for(int i=0;i<4;i++){
			X=x+dx[i],Y=y+dy[i];
			if(X>=1&&Y>=1&&X<=n&&Y<=n&&b[X][Y]==0&&(a[x][y]^a[X][Y]))
			ans++,b[X][Y]=cnt,qx.push(X),qy.push(Y);
		}
	}
	sum[cnt]=ans;
}
int main(){
	int x,y;
	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",&x,&y);
		if(b[x][y]!=0) printf("%d\n",sum[b[x][y]]);
		else{
			b[x][y]=++cnt,ans=1;
			qx.push(x),qy.push(y);
			bfs();
			printf("%d\n",sum[cnt]);
		}
	}
	return 0;
}
2020/10/9 16:20
加载中...