求助!!!记忆化TLM70
查看原帖
求助!!!记忆化TLM70
418419
ko_no_lzx_da楼主2021/10/13 12:54
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int x[4]={0,0,1,-1};
int y[4]={1,-1,0,0};
int n,m,ans=0,book[10000][10000],book2[10000][10000],path[10000],o=0;
char migong[10000][10000];
bool pd=false;
void dfs(int idx,int idy,char pre){
	char pop;
	if(pre=='1'){
		pop='0';
	}else{
		pop='1';
	}
	for(int i=0;i<4;i++){
		int dx=idx+x[i];
		int dy=idy+y[i];
		if(dx<=0||dx>n||dy<=0||dy>n)continue;
		if(book[dx][dy]==0&&migong[dx][dy]==pop){
			book[dx][dy]=1;
			dfs(dx,dy,migong[dx][dy]);
		}
	}
}
int main(){
	cin >>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin >>migong[i][j];
		}
	}
	int xm,ym;
	for(int i=0;i<m;i++){
		cin >>xm>>ym;
		if(book2[xm][ym]!=0){
			path[o]=book2[xm][ym];
			o++;
			continue;
		}
		dfs(xm,ym,migong[xm][ym]);
		if(!pd){
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					if(book[i][j]==1){
						ans++;
					}
				}
			}
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					if(book[i][j]==1){
						book2[i][j]=ans;
						book[i][j]=0;
					}
				}
			}
		}
		path[o]=ans;
		if(ans==0){
			path[o]=1;
		}
		o++;
		ans=0;
		pd=false;
	}
	for(int i=0;i<o;i++){
		cout <<path[i]<<endl;
	}
	return 0;
}


2021/10/13 12:54
加载中...