# leetcode200-dfs-島嶼的數量

```/** <p>給你一個由 <code>'1'</code>（陸地）和 <code>'0'</code>（水）組成的的二維網格，請你計算網格中島嶼的數量。</p> <p>島嶼總是被水包圍，並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。</p> <p>此外，你可以假設該網格的四條邊均被水包圍。</p> <p> </p> <p><strong>示例 1：</strong></p> <pre> <strong>輸入：</strong>grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ] <strong>輸出：</strong>1 </pre> <p><strong>示例 2：</strong></p> <pre> <strong>輸入：</strong>grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ] <strong>輸出：</strong>3 </pre> <p> </p> <p><strong>提示：</strong></p> <ul> <li><code>m == grid.length</code></li> <li><code>n == grid[i].length</code></li> <li><code>1 <= m, n <= 300</code></li> <li><code>grid[i][j]</code> 的值爲 <code>'0'</code> 或 <code>'1'</code></li> </ul> <div><div>Related Topics</div><div><li>深度優先搜索</li><li>廣度優先搜索</li><li>並查集</li><li>數組</li><li>矩陣</li></div></div><br><div><li>👍 1770</li><li>👎 0</li></div> */ //leetcode submit region begin(Prohibit modification and deletion) class Solution { //主函數計算島嶼數量 public int numIslands(char[][] grid) { int res = 0; int m = grid.length; int n = grid[0].length; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(grid[i][j]=='1'){ res++; dfs(grid,i,j); } } } return res; } //子函數負責淹沒 flood fill, void dfs(char[][] grid,int i ,int j){ int m = grid.length; int n = grid[0].length; if (i < 0 || j < 0 || i >= m || j >= n) { return ; } if(grid[i][j]=='0'){ return ; } grid[i][j]='0'; dfs(grid,i-1,j); dfs(grid,i+1,j); dfs(grid,i,j+1); dfs(grid,i,j-1); } } //leetcode submit region end(Prohibit modification and deletion) ```