/*
* 给一个01矩阵,求不同的岛屿的个数。
* 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
*
* eg
* [
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
* return 3;
*/
这是一道典型的深度优先搜索的题目,我们可以将已经遍历过的岛屿点设置为2,避免重复搜索
private int NumOfLands(int[,] grid)
{
int res = 0;
for (int i = 0; i < grid.GetLength(0); i++)
{
for (int j = 0; j < grid.GetLength(1); j++)
{
if(grid[i,j]!=1)
continue;
DFS(grid,i,j);
res++;
}
}
return res;
}
/// <summary>
/// 深度优先算法
/// </summary>
/// <param name="grid">岛屿矩阵</param>
/// <param name="i">x索引</param>
/// <param name="j"></param>
private void DFS(int[,] grid, int i, int j)
{
if (i < 0 || i >= grid.GetLength(0) || j < 0 || j >= grid.GetLength(1) || grid[i, j] != 1)
return;
grid[i, j] = 2; //将已经遍历过的岛屿点设置为2,避免重复遍历
DFS(grid, i - 1, j);
DFS(grid, i + 1, j);
DFS(grid, i, j - 1);
DFS(grid, i, j + 1);
}
相关深度优先算法的题目: