个人笔记-C#-岛屿数量

262 阅读1分钟

罗德岛周围有众多小型岛屿,其周围的地形由一个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);
    }
}