Untitled
unknown
plain_text
2 years ago
2.0 kB
5
Indexable
class Solution { public: int islcount(vector<vector<int>>& grid,vector<pair<int,int>>&directions){ //returns no of islands by using bfs on matrix int ans=0; vector<vector<bool>> vis(grid.size(),vector<bool>(grid[0].size(),false)); for(int i=0;i<grid.size();i++){ for(int j=0;j<grid[0].size();j++){ if(grid[i][j]==1 && !vis[i][j]){ // do bfs and make all grids in this island visited ans+=1; vis[i][j]=1; queue<pair<int,int>>q; q.push({i,j}); while(!q.empty()){ pair<int,int> p=q.front(); q.pop(); int x=p.first, y=p.second; for(auto d:directions){ int new_x = x+d.first; int new_y= y+d.second; if( 0<=new_x && new_x<grid.size() && 0<=new_y && new_y <grid[0].size() && !vis[new_x][new_y] && grid[new_x][new_y]==1){ q.push({new_x,new_y}); vis[new_x][new_y]=1; } } } } } } return ans; } int minDays(vector<vector<int>>& grid) { vector<pair<int,int>> directions={{-1,0},{1,0},{0,-1},{0,1}}; //up,down,left,right int c=islcount(grid,directions); if(c>1) return 0; if(c==0) return 0; else{ for(int i=0;i<grid.size();i++){ for(int j=0;j<grid[0].size();j++){ if(grid[i][j]==1){ grid[i][j]=0; if(islcount(grid,directions)>1 || islcount(grid,directions)==0) return 1; grid[i][j]=1; } } } return 2; } } };
Editor is loading...