pranavsindura

Grid BFS/DFS

Oct 26th, 2023
902
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <utility>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. const vector<int> dx = {0, 0, 1, -1};
  8. const vector<int> dy = {1, -1, 0, 0};
  9. // const vector<int> dx = {0, 0, 1, -1, 1, 1, -1, -1};
  10. // const vector<int> dy = {1, -1, 0, 0, 1, -1, 1, -1};
  11.  
  12. bool is_in_bounds(int x, int y, int N, int M) {
  13.   return x >= 0 && x < N && y >= 0 && y < M;
  14. }
  15.  
  16. void dfs(int x, int y, int N, int M, vector<vector<int>> &grid,
  17.          vector<vector<bool>> &vis) {
  18.   if (vis[x][y]) {
  19.     return;
  20.   }
  21.   vis[x][y] = true;
  22.  
  23.   for (int i = 0; i < 4; i++) {
  24.     int nx = x + dx[i], ny = y + dy[i];
  25.     if (is_in_bounds(nx, ny, N, M) && !vis[nx][ny] && grid[nx][ny] == 1) {
  26.       dfs(nx, ny, N, M, grid, vis);
  27.     }
  28.   }
  29. }
  30.  
  31. void bfs(int u, int v, int N, int M, vector<vector<int>> &grid,
  32.          vector<vector<bool>> &vis) {
  33.   queue<pair<int, int>> Q;
  34.  
  35.   Q.push(make_pair(u, v));
  36.   while(!Q.empty()) {
  37.     pair<int, int> nd = Q.front();
  38.     Q.pop();
  39.     int x = nd.first, y = nd.second;
  40.     vis[x][y] = true;
  41.  
  42.     for (int i = 0; i < 4; i++) {
  43.       int nx = x + dx[i], ny = y + dy[i];
  44.       if (is_in_bounds(nx, ny, N, M) && !vis[nx][ny] && grid[nx][ny] == 1) {
  45.         vis[nx][ny] = true; // IMPORTANT FOR BFS
  46.         Q.push(make_pair(nx, ny));
  47.       }
  48.     }
  49.   }
  50. }
  51.  
  52. int main() {
  53.   int N, M; // N x M grid of 0/1
  54.   cin >> N >> M;
  55.   vector<vector<int>> grid(N, vector<int>(M, 0));
  56.   vector<vector<bool>> vis(N, vector<bool>(M, false));
  57.   for (int i = 0; i < N; i++) {
  58.     for (int j = 0; j < M; j++) {
  59.       cin >> grid[i][j];
  60.     }
  61.   }
  62.  
  63.   int island_count = 0;
  64.   for (int i = 0; i < N; i++) {
  65.     for (int j = 0; j < M; j++) {
  66.       if (!vis[i][j] && grid[i][j] == 1) {
  67.         island_count++;
  68.         dfs(i, j, N, M, grid, vis);
  69.       }
  70.     }
  71.   }
  72.  
  73.   cout << "Island Count: " << island_count << endl;
  74.  
  75.   int island_count_bfs = 0;
  76.   for (int i = 0; i < N; i++) {
  77.     for (int j = 0; j < M; j++) {
  78.       if (!vis[i][j] && grid[i][j] == 1) {
  79.         island_count_bfs++;
  80.         bfs(i, j, N, M, grid, vis);
  81.       }
  82.     }
  83.   }
  84.  
  85.   cout << "Island Count BFS: " << island_count << endl;
  86. }
  87.  
  88. /*
  89. 4 9
  90. 0 0 1 0 0 1 1 1 0
  91. 0 1 1 1 1 0 1 1 0
  92. 0 0 1 1 0 0 1 0 0
  93. 0 0 0 0 0 0 0 0 0
  94.  * */
  95.  
Advertisement
Add Comment
Please, Sign In to add comment