Advertisement
Guest User

жопный код

a guest
May 26th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1.  
  2. void dfs (int i, int j, int d) {
  3.  
  4.     for (int i1 = i - 1; i1 >= 0 && a[i1][j] && !used[i1 * m + j]; --i1) {
  5.         dist[i1 * m + j] = min(dist[i1 * m + j], d + 1);
  6.         used[i1 * m + j] = true;
  7.         dfs(i1, j, d + 1);
  8.         used[i1 * m + j] = false;
  9.     }
  10.  
  11.     for (int i1 = i + 1; i1 < n && a[i1][j] && !used[i1 * m + j]; ++i1) {
  12.         dist[i1 * m + j] = min(dist[i1 * m + j], d + 1);
  13.         used[i1 * m + j] = true;
  14.         dfs(i1, j, d + 1);
  15.         used[i1 * m + j] = false;
  16.     }
  17.  
  18.     for (int j1 = j + 1; j1 < m && a[i][j1] && !used[i * m + j1]; ++j1) {
  19.         dist[i * m + j1] = min(dist[i * m + j1], d + 1);
  20.         used[i * m + j1] = true;
  21.         dfs(i, j1, d + 1);
  22.         used[i * m + j1] = false;
  23.     }
  24.  
  25.     for (int j1 = j - 1; j1 >= 0 && a[i][j1]; --j1) {
  26.         dist[i * m + j1] = min(dist[i * m + j1], d + 1);
  27.         used[i * m + j1] = true;
  28.         dfs(i, j1, d + 1);
  29.         used[i * m + j1] = false;
  30.     }
  31.  
  32.  
  33.     bool flag1 = true, flag2 = true, flag3 = true, flag4 = true;
  34.  
  35.     for (int k = 1; ; ++k) {
  36.  
  37.         int X = (i + k) * m + j + k;
  38.         if (flag1 && i + k < n && j + k < m && a[i + k][j + k] && !used[X]) {
  39.             dist[X] = min(dist[X], d + 1);
  40.             used[X] = true;
  41.             dfs(i + k, j + k, d + 1);
  42.             used[X] = false;
  43.         }
  44.         else flag1 = false;
  45.  
  46.         X = (i + k) * m + j - k;
  47.         if (flag2 && i + k < n && j - k >= 0 && a[i + k][j - k] && !used[X]) {
  48.             dist[X] = min(dist[X], d + 1);
  49.             used[X] = true;
  50.             dfs(i + k, j - k, d + 1);
  51.             used[X] = false;
  52.         }
  53.         else flag2 = false;
  54.  
  55.         X = (i - k) * m + j + k;
  56.         if (flag3 && i - k >= 0 && j + k < m && a[i - k][j + k] && !used[X]) {
  57.             dist[X] = min(dist[X], d + 1);
  58.             used[X] = true;
  59.             dfs(i - k, j + k, d + 1);
  60.             used[X] = false;
  61.         }
  62.         else flag3 = false;
  63.  
  64.         X = (i - k) * m + j - k;
  65.         if (flag4 && i - k >= 0 && j - k >= 0 && a[i - k][j - k] && !used[X]) {
  66.             dist[X] = min(dist[X], d + 1);
  67.             used[X] = true;
  68.             dfs(i - k, j - k, d + 1);
  69.             used[X] = false;
  70.         }
  71.         else flag4 = false;
  72.        
  73.         if (!flag1 && !flag2 && !flag3 && !flag4) break;
  74.     }
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement