#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
int dx[] = { 0,1,-1,0 };
int dy[] = { 1,0,0,-1 };
int n, mmap[111][111], vis[111][111];
int mmin, mmax;
bool dfs(int x, int y) {
if (x == n && y == n)return 1;
int nx, ny;
for (int i = 0; i < 4; i++) {
nx = x + dx[i];
ny = y + dy[i];
if (mmap[nx][ny] > mmax || mmap[nx][ny] < mmin)
continue;
if (nx<1 || nx>n || ny<1 || ny>n||vis[nx][ny])
continue;
vis[nx][ny] = 1;
if (dfs(nx, ny))return 1;
}
return 0;
}
bool c(int d) {
for (int i = 0; i + d <= 110; i++) {
memset(vis, 0, sizeof(vis));
mmin = i, mmax = i + d;
if ((mmap[1][1] <= i + d && mmap[1][1] >= i)
&& dfs(1, 1))
return 1;
}
return 0;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%d", &mmap[i][j]);
int l = 0, r = 110,mid;
while (r > l) {
mid = (r + l) / 2;
if (c(mid))r = mid;
else l = mid + 1;
}
printf("%d\n", r);
return 0;
}
07-09
07-09
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交