Untitled

 avatar
unknown
plain_text
a year ago
1.9 kB
4
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...