Advertisement
tuki2501

mtwalk.cpp

Nov 8th, 2021
627
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 105;
  5.  
  6. int dx[4] = {-1, 0, 1, 0};
  7. int dy[4] = {0, -1, 0, 1};
  8.  
  9. int n, a[N][N];
  10. bool vst[N][N];
  11.  
  12. bool dfs(int x, int y, int lo, int hi) {
  13.   if (x < 1 || x > n || y < 1 || y > n) return false;
  14.   if (vst[x][y] || a[x][y] < lo || a[x][y] > hi) return false;
  15.   if (x == n && y == n) return true;
  16.   vst[x][y] = true;
  17.   for (int i = 0; i < 4; i++) {
  18.     int nx = x + dx[i], ny = y + dy[i];
  19.     if (dfs(nx, ny, lo, hi)) return true;
  20.   }
  21.   return false;
  22. }
  23.  
  24. bool check(int x) {
  25.   for (int i = 0; i + x <= 110; i++) {
  26.     memset(vst, 0, sizeof(vst));
  27.     if (dfs(1, 1, i, i + x)) return true;
  28.   }
  29.   return false;
  30. }
  31.  
  32. int main() {
  33.   cin >> n;
  34.   for (int i = 1; i <= n; i++)
  35.   for (int j = 1; j <= n; j++) {
  36.     cin >> a[i][j];
  37.   }
  38.   int l = 0, r = 110, ans = -1;
  39.   while (l <= r) {
  40.     int x = (l + r) / 2;
  41.     if (check(x)) {
  42.       ans = x;
  43.       r = x - 1;
  44.     }
  45.     else l = x + 1;
  46.   }
  47.   cout << ans << '\n';
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement