Leetcode 200. 岛屿数量 解题思路及C++实现
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 200. 岛屿数量 解题思路及C++实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解題思路:
典型的深度優先搜索問題,跟第130題?被圍繞的區域 有點像,只不過這里不僅要找出被水包圍的島嶼,還要計算這些島嶼的總數。
使用深度優先搜索的方法,大循環是遍歷整個grid數組(兩個for循環)。通過與grid數組相同緯度的數組visited來標記訪問過的島嶼位置。循環內的那個if條件執行的邏輯是:當遇到島嶼塊‘1’時,通過visited數組,將與其相連的島嶼塊都置為1,然后res++,即找到了一個島嶼。遍歷完成之后,即可得到島嶼數量。
在dfs遞歸函數中,要特別注意的是要添加判斷visited[i][j] == 1,防止無限遞歸。
?
class Solution { public:int numIslands(vector<vector<char>>& grid) {int row = grid.size();if(row == 0) return 0;int col = grid[0].size();if(col == 0) return 0;vector<vector<int> > visited(row, vector<int>(col, 0));int res = 0;for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(visited[i][j] == 0 && grid[i][j] == '1'){dfs(grid, visited, i, j);res++;}}}return res;}void dfs(vector<vector<char>>& grid, vector<vector<int>>& visited, int i, int j){//必須要加上 visited[i][j] == 1 這一判斷,不然就不停地在遞歸if(i < 0 || i > grid.size() - 1 || j < 0 || j > grid[0].size() - 1 || grid[i][j] == '0' || visited[i][j] == 1) return;visited[i][j] = 1;dfs(grid, visited, i - 1, j);dfs(grid, visited, i + 1, j);dfs(grid, visited, i, j - 1);dfs(grid, visited, i, j + 1);} };?
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Leetcode 200. 岛屿数量 解题思路及C++实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 133. 克隆图 解题
- 下一篇: Leetcode 207. 课程表 解题