Advertisement
sidjha57

Surrounded Regions

Nov 4th, 2021
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. class Solution {
  2. public:
  3. vector<pair<int,int>> adj[40000][40000];
  4. map<pair<int,int>,bool> vis;
  5. int n,m;
  6.  
  7. bool check (int j, int i, int n, int m,vector<vector<char>>& board) {
  8.     if (i<n && i>=0 && j<m && j>=0 && board[i][j] == 'O') return true;
  9.     return false;
  10. }
  11.  
  12. void dfs(pair<int,int> cur) {
  13.     if (vis[{cur.first,cur.second}]) return;
  14.     vis[{cur.first,cur.second}] = 1;
  15.     for (auto ch : adj[cur.first][cur.second]) {
  16.         if (!vis[{ch.first,ch.second}]) {
  17.             dfs(ch);
  18.         }
  19.     }
  20. }
  21.  
  22. void add_edges(int i, int j,vector<vector<char>>& board) {
  23.     int dr[4] = {1,-1,0,0};
  24.     int dc[4] = {0,0,-1,1};
  25.    
  26.     for (int k=0;k<4;k++) {
  27.         if (check(i+dr[k], j+dc[k],n,m,board))
  28.             adj[i][j].push_back({i+dr[k],j+dc[k]}), adj[i+dr[k]][j+dc[k]].push_back({i,j});
  29.     }
  30. }
  31.    
  32.  
  33. void solve(vector<vector<char>>& board) {
  34.     n = board.size(), m = board[0].size();
  35.      
  36.     vector<pair<int,int>> nodes;
  37.    
  38.     for (int i=0; i<n; i++) {
  39.         for (int j=0; j<m; j++) {
  40.             if (board[i][j] == 'O') {
  41.                 if (i==0 || j == 0 || i == n || j == m) nodes.push_back({i,j});
  42.                 add_edges(i,j,board);
  43.             }
  44.         }
  45.     }
  46.    
  47.     for (auto cur : nodes) {
  48.         dfs(cur);
  49.     }
  50.    
  51.     for (int i =0; i<n; i++)
  52.         for (int j=0; j<m; j++)
  53.             if (board[i][j] == 'O' && vis[{i,j}] == 0)
  54.                 board[i][j] = 'X';
  55.        
  56.     }
  57. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement