Leetcode200. Number of Islands島嶼的個數

給定一個由 '1'(陸地)和 '0'(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。

示例 1:

輸入: 11110 11010 11000 00000 輸出: 1

示例 2:

輸入: 11000 11000 00100 00011 輸出: 3

廣度優先搜索

class Solution {
public:
    int dx[4] = {1, -1, 0, 0};
    int dy[4] = {0, 0, 1, -1};
    int numIslands(vector<vector<char> >& grid) 
    {
        int r = grid.size();
        if(r == 0)
        {
            return 0;
        }
        int c = grid[0].size();
        vector<vector<bool> > visit(r, vector<bool>(c, false));
        queue<pair<int, int> > q;
        int res = 0;
        for(int i = 0; i < r; i++)
        {
            for(int j = 0; j < c; j++)
            {
                if(grid[i][j] == '1' && visit[i][j] == false)
                {
                    res++;
                    visit[i][j] = true;
                    q.push(make_pair(i ,j));
                    while(!q.empty())
                    {
                        int x = q.front().first;
                        int y = q.front().second;
                        q.pop();
                        for(int i = 0; i < 4; i++)
                        {
                            int xx = x + dx[i];
                            int yy = y + dy[i];
                            if(xx < 0 || xx >= r || yy < 0 || yy >= c)
                                continue;
                            if(visit[xx][yy] == true || grid[xx][yy] == '0')
                                continue;
                            visit[xx][yy] = true;
                            q.push(make_pair(xx, yy));
                        }
                    }
                    
                }
            }
        }
        return res;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章