如题,本来还想着循序渐进先当走迷宫写个DFS,然后再试试加上二分答案,再试试BFS,结果DFS就AC了...
#include <iostream>
using namespace std;
const int MAXN = 1001;
int n, m;
int f[MAXN][MAXN];
int g[MAXN][MAXN];
int zl[4][2] = { {0, 1}, {1, 0}, {0, -1}, {-1, 0} };
int dfs(int x, int y) {
if (x == n - 1 && y == m - 1) return 1;
f[x][y] = 1;
for (int i = 0; i < 4; i++) {
int nx = x + zl[i][0];
int ny = y + zl[i][1];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && f[nx][ny] == 0)
if (dfs(nx, ny) == 1) return 1;
}
return 0;
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> g[i][j];
for (int k = 0;k < 1005;k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
f[i][j] = g[i][j] > k ? 1 : 0;
}
}
if (dfs(0, 0)) {
cout << k << endl;
break;
}
}
return 0;
}