问题:https://leetcode-cn.com/problems/number-of-islands/
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3
GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/NumIslandsClass.cs
思路:使用深度搜索(DFS)遍历图,已经遍历的元素递归更改值,防止重复搜索
public int NumIslands(char[,] grid) { if (grid.Length == 0) return 0; var result = 0; for (int i = 0; i < grid.GetLength(0); i++) { for (int j = 0; j < grid.GetLength(1); j++) { if (grid[i, j] == '1') { result++; ToTwo(grid, i, j); } } } return result; } private void ToTwo(char[,] grid, int i, int j) { if (i < 0 || j < 0 || i >= grid.GetLength(0) || j >= grid.GetLength(1) || grid[i, j] != '1') { return; } grid[i, j] = '2'; ToTwo(grid, i, j + 1); ToTwo(grid, i, j - 1); ToTwo(grid, i - 1, j); ToTwo(grid, i + 1, j); }