罗德岛周围有众多小型岛屿,其周围的地形由一个n*m的矩形数组给出。
每个矩形格子可能是0或者1,0代表该块地形是海洋,1代表该块地形是陆地。
四周相邻的陆地属于同一座岛屿,作为新上任的doctor,你需要知道一共有多少座岛屿。
输入描述
第一行两个整数n和m。(1 <= n, m <= 100)
接下来n行,每行m个整数,要么是0,要么是1,O代表海洋,1代表陆地。
输出描述
一行一个整数,代表岛屿的数量。
示例1
输入
4 4
1 1 1 0
1 1 0 0
1 1 1 0
0 0 0 1
输出
2
示例2
输入
4 5
1 0 0 1
1 1 0 0
0 1 0 1
0 1 0 0
1 0 0 1
输出
5
示例3
输入
5 5
1 1 0 1 1
1 0 0 1 0
1 0 1 1 0
1 1 1 0 0
0 1 0 0 0
输出
1
using System;
class Program
{
static void Main()
{
// 读取输入
string[] inputSize = Console.ReadLine().Split();
int n = int.Parse(inputSize[0]);
int m = int.Parse(inputSize[1]);
int[,] grid = new int[n, m];
// 读取地形数据
for (int i = 0; i < n; i++)
{
string[] row = Console.ReadLine().Split();
for (int j = 0; j < m; j++)
{
grid[i, j] = int.Parse(row[j]);
}
}
// 计算岛屿数量
int islandCount = CountIslands(n, m, grid);
// 输出结果
Console.WriteLine(islandCount);
}
static int CountIslands(int n, int m, int[,] grid)
{
int islandCount = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (grid[i, j] == 1)
{
islandCount++;
DFS(grid, i, j);
}
}
}
return islandCount;
}
static void DFS(int[,] grid, int i, int j)
{
if (i < 0 || i >= grid.GetLength(0) || j < 0 || j >= grid.GetLength(1) || 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);
}
}