Untitled
unknown
plain_text
2 years ago
1.9 kB
9
Indexable
void BFS(int r,int c,vector<vector<int>>&visited,int rows,int cols,vector<vector<char>>& grid)
{
//dir --> 0,1 1,0 -1,0 0,-1
int i,j;
queue<pair<int,int>>q;
visited[r][c]=1;
q.push(make_pair(r,c));
while(q.size())
{
pair<int,int>u=q.front();
cout<<u.first<<" "<<u.second<<"\n";
q.pop();
if(r+1<rows && c<cols && visited[r+1][c]==0 &&grid[r+1][c]=='1')
{
q.push(make_pair(r+1,c));
visited[r+1][c]=1;
}
if(r<rows && c+1<cols && visited[r][c+1]==0 &&grid[r][c+1]=='1')
{
q.push(make_pair(r,c+1));
visited[r][c+1]=1;
}
if(r-1>=0 && c<cols && visited[r-1][c]==0 &&grid[r-1][c]=='1')
{
q.push(make_pair(r-1,c));
visited[r-1][c]=1;
}
if(r<rows && c-1>=0 && visited[r][c-1]==0 &&grid[r][c-1]=='1')
{
q.push(make_pair(r,c-1));
visited[r][c-1]=1;
}
}
}
int numIslands(vector<vector<char>>& grid)
{
int rows=grid.size();
int cols=grid[0].size();
vector<vector<int>>visited;
int i,j,ct=0;
for(i=0;i<rows;i++)
{
vector<int>v;
for(j=0;j<cols;j++)
{
v.push_back(0);
}
visited.push_back(v);
}
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
{
if(grid[i][j]=='1' and visited[i][j]==0)
{
BFS(i,j,visited,rows,cols,grid);
ct++;
}
}
}
return ct;
}Editor is loading...