mfgnik

Untitled

Nov 25th, 2020
424
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. using namespace std;
  5.  
  6. int const inf = int(1e9 + 7);
  7.  
  8.  
  9. std::pair<int, int> queue[100 * 110];
  10. int results[110][110], table[110][110];
  11.  
  12.  
  13. bool IsOk(int x, int y, int n, int m) {
  14.     return 1 <= x && x <= n && 1 <= y && y <= m;
  15. }
  16.  
  17. void bfs(int i, int j, int n, int m) {
  18.     if (!table[i][j])
  19.         return;
  20.     int head, tail;
  21.     head = tail = 0;
  22.     queue[tail++] = {i, j};
  23.     results[i][j] = 0;
  24.     while (head < tail) {
  25.         int x = queue[head].first, y = queue[head++].second;
  26.         for (int i = -1; i <= 1; i++)
  27.             for (int j = -1; j <= 1; j++) {
  28.                 if (abs(i) + abs(j) != 1) {
  29.                     continue;
  30.                 }
  31.                 if (IsOk(x + i, y + j, n, m)) {
  32.                     if (results[x + i][y + j] > results[x][y] + 1) {
  33.                         results[x + i][y + j] = results[x][y] + 1;
  34.                         queue[tail++] = {x + i, y + j};
  35.                     }
  36.                 }
  37.             }
  38.     }
  39. }
  40.  
  41. int main() {
  42.     int n, m;
  43.     std::cin >> n >> m;
  44.     for (int i = 1; i <= n; i++) {
  45.         for (int j = 1; j <= m; j++) {
  46.             std::cin >> table[i][j];
  47.             results[i][j] = table[i][j] ? 0 : inf;
  48.         }
  49.     }
  50.    
  51.     for (int i = 1; i <= n; i++) {
  52.         for (int j = 1; j <= m; j++) {
  53.             bfs(i, j, n, m);
  54.         }
  55.     }
  56.    
  57.     for (int i = 1; i <= n; i++) {
  58.         for (int j = 1; j <= m; j++) {
  59.             std::cout << results[i][j] << " ";
  60.         }
  61.         std::cout << "\n";
  62.     }
  63.  
  64. }
RAW Paste Data