请问这样写深搜为什么会超时,只有返回值判断和题解不一样
查看原帖
请问这样写深搜为什么会超时,只有返回值判断和题解不一样
187822
michuancey楼主2020/11/1 15:59

感觉只有深搜部分的返回判断不一样,看了好久没发现这样写比题解的深搜慢在哪了,请大佬们帮忙看看。

#include <bits/stdc++.h>
using namespace std;

const int MAX = 2e3+5;
const int INF = 0x3f3f3f3f;

int n,m; 
int p[MAX][MAX];
bool visit[MAX][MAX];
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int res;

bool dfs(int x,int y,int ceiling) {
	if(x==n) return true;
	visit[x][y]=true;
	for(int i=0;i<4;i++) {
		int nx = x+dir[i][0];
		int ny = y+dir[i][1];
		if(nx<1||ny<1||nx>n||ny>m||visit[nx][ny]||p[nx][ny]>ceiling) continue;
		if(dfs(nx,ny,ceiling)) return true;
	}
	return false;
}


int main(int argc, char *argv[]) {
#ifdef LOCAL
	freopen("./data.txt","r",stdin);
#endif
	cin >> n >> m;
	int l=INF,r=-INF,mid;	
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=m;j++) {
			cin >> p[i][j];
			r = max(r,p[i][j]);
			l = min(l,p[i][j]);
		}
	}
	while(l<=r) {
		int mid=(l+r)>>1;
//		cout << mid << endl;
		memset(visit,0,sizeof(visit));
		if(dfs(1,1,mid)) {
			r = mid-1;
			res = mid;
		} else {
			l = mid+1;
		}
	}
	cout << res;
	return 0;
}

2020/11/1 15:59
加载中...