感觉只有深搜部分的返回判断不一样,看了好久没发现这样写比题解的深搜慢在哪了,请大佬们帮忙看看。
#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;
}