RE9+TLE1求助
  • 板块P1141 01迷宫
  • 楼主Gohldg
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/3 18:35
  • 上次更新2023/11/3 11:44:31
查看原帖
RE9+TLE1求助
757214
Gohldg楼主2023/7/3 18:35
#include <iostream>
using namespace std;
int a[10001][10001];
int b[10001][10001];
int n,m,T,Min=2147483647;
int sum=1;
int map[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
void dfs(int x,int y){
	if(a[x][y]==1){
		if(a[x+1][y]==1&&a[x-1][y]==1&&a[x][y+1]==1&&a[x][y-1]==1){
			if(sum<Min)Min=sum;
			return ;	
		}
		for(int i=0;i<=3;i++){
			int d=x,e=y,b=map[i][0],c=map[i][1];
			d+=b,e+=c;
			if(a[d][e]!=a[x][y]||a[d][e]!=1){
				a[d][e]=1;
				sum++;
				dfs(d,e);
				a[d][e]=0;
			}
		}
	}else{
		if(a[x+1][y]==0&&a[x-1][y]==0&&a[x][y+1]==0&&a[x][y-1]==0){
			if(sum<Min)Min=sum;
			return ;	
		}
		for(int i=0;i<=3;i++){
			int d=x,e=y,b=map[i][0],c=map[i][1];
			d+=b,e+=c;
			if(a[d][e]!=a[x][y]||a[d][e]!=0){
				a[d][e]=0;
				sum++;
				dfs(d,e);
				a[d][e]=1;
			}
		}
	}
}
int main(){
    cin>>n>>m;
	int f,g;
    for(int i=1;i<=n;i++)
    	for(int j=1;j<=n;j++){
    		char abc;
    		cin>>abc;
    		if(abc=='0'){
				a[i][j]=0;
				b[i][j]=0;
			}else if(abc=='1'){
				a[i][j]=1;
				b[i][j]=1;
			}
		}//字符转换为数字 
	for(int i=0;i<=n+1;i++){
		for(int j=0;j<=n+1;j++){
			if(i==0||j==0||j==n+1||i==n+1){
				a[i][j]=1;
				b[i][j]=1;
			}
		}
	}
    for(int i=1;i<=m;i++){
    	cin>>f>>g;
    	sum=1;
    	dfs(f,g);
    	cout <<Min<<endl;
    	for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				a[i][j]=b[i][j];
			}
		}
	}
    return 0;
}

RE+TLE

2023/7/3 18:35
加载中...