leetcode之島嶼數量

給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。

島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。

此外,你可以假設該網格的四條邊均被水包圍。

簡要題解:

遍歷一下所有的島嶼遇到1的地方即從這個地方開始搜索 找到1的地方即設爲0,然後遍歷完整個數組即可。主要代碼如下:

class Solution {
public:
   int row;int col; 
   int dx[4]={0,1,-1,0};
   int dy[4]={1,0,0,-1}; 
    void dfs(vector<vector<char>>& mp,int x,int y)
    {
       mp[x][y]='0';
       for(int i=0;i<4;i++)
       {
           int xx=x+dx[i];
           int yy=y+dy[i];
           if(xx>=0&&xx<row&&yy>=0&&yy<col&&mp[xx][yy]=='1')
             dfs(mp,xx,yy);
       }
       return ;
    }
    int numIslands(vector<vector<char>>& grid) {
      if(grid.size()==0)return 0;
       row=grid.size();col=grid[0].size();
       int ans=0;
       for(int i=0;i<row;i++)
         for(int j=0;j<col;j++)
         {
          if(grid[i][j]=='1')
            {
                ans++;
                dfs(grid,i,j);
            }
         }
         return ans;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章