九敏,去记搜70,加记搜30
  • 板块P1141 01迷宫
  • 楼主feiwudzh
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/7/25 11:47
  • 上次更新2023/11/3 07:46:15
查看原帖
九敏,去记搜70,加记搜30
790506
feiwudzh楼主2023/7/25 11:47

求助,BFS加记搜

#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e=0,i,j,k,l,aa[1005][1005]={0},ba[1005][1005]={0};
char bb[1005][1005];
bool ab[1005][1005];
void bfs(int f,int g){
	e+=1;
	ab[f][g]=false;
	if(f!=1&&ab[f-1][g]&&aa[f-1][g]==aa[f][g]){
		bfs(f-1,g);
	}
	if(g!=1&&ab[f][g-1]&&aa[f][g-1]==aa[f][g]){
		bfs(f,g-1);
	}
	if(g!=a&&ab[f][g+1]&&aa[f][g+1]==aa[f][g]){
		bfs(f,g+1);
	}
	if(f!=a&&ab[f+1][g]&&aa[f+1][g]==aa[f][g]){
		bfs(f+1,g);
	}
	return ;
}
int main(){
	scanf("%d %d",&a,&b);
	for(i=1;i<=a;i++){
		for(j=1;j<=a;j++){
			aa[i][j]=0;
			ab[i][j]=true;
		}
	}
	for(i=1;i<=a;i++){
    	scanf("%s",bb[i]);
    }
    for(i=1;i<=a;i++){
		for(j=1;j<=a;j++){
			aa[i][j]=bb[i][j-1]-'0';
			if((i+j)%2==0){
				aa[i][j]=1-aa[i][j];#二染色
			}
		}
	}
	for(i=1;i<=b;i++){
		scanf("%d %d",&c,&d);
		if(ba[c][d]==0){
			bfs(c,d);
			printf("%d\n",e);
			for(k=1;k<=a;k++){
				for(j=1;j<=a;j++){
					if(!ab[i][j]){
						ba[k][j]=e;
					}
				}
			}
			e=0;
			for(k=1;k<=a;k++){
				for(j=1;j<=a;j++){
					ab[k][j]=true;
				}
			}
		}
		else{
			printf("%d\n",ba[c][d]);
		}
		
	}
}
```c
2023/7/25 11:47
加载中...