求助
  • 板块P1141 01迷宫
  • 楼主Liuyilin1
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/19 21:45
  • 上次更新2023/11/2 19:03:04
查看原帖
求助
727192
Liuyilin1楼主2023/9/19 21:45
#include<bits/stdc++.h>
using namespace std;
char a[1001][1001];
int ans;
int f[1001][1001];
int dx[]= {0,-1,1,0,0};
int dy[]= {0,0,0,-1,1};
int n,m;
void dfs(int x,int y,int s) {
	if((f[x-1][y]==1&&f[x+1][y]==1&&f[x][y+1]==1&&f[x][y-1]==1)||(a[x-1][y]!=!a[x][y]&&a[x+1][y]!=!a[x][y]&&a[x][y+1]!=!a[x][y]&&a[x][y-1]!=!a[x][y])) {
//		cout<<"--- ";
		ans=max(ans,s);
		return ;
	}
	for(int i=1; i<=4; i++) {
		int x1=x+dx[i];
		int y1=y+dy[i];
		if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&f[x1][y1]==0&&a[x1][y1]!=a[x][y]) {
//	cout<<"- ";
			f[x1][y1]=1;
			dfs(x1,y1,s+1);
			f[x1][y1]=0;
		}
	}
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=n; j++) {
			cin>>a[i][j];
		}
	}
	for(int i=0; i<=n+1; i++) {
		for(int j=0; j<=n+1; j++) {
			f[i][j]=1; 
		}
	}
	for(int i=1; i<=m; i++) {
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=n; j++) {
				f[i][j]=0;
			}
		}
		ans=0;
		int s1,s2;
		cin>>s1>>s2;
		f[s1][s2]=1;
		dfs(s1,s2,1);
		cout<<ans<<endl;
	}
	return 0;
}

求求了,WA和TLE

2023/9/19 21:45
加载中...