您所在的位置:首页 - 生活 - 正文生活

岛屿的数量c语言

莱依
莱依 04-29 【生活】 716人已围观

摘要用C语言编程计算小岛区块数在计算机编程中,通常可以用C语言来解决各种问题。下面我们来看一个关于计算小岛区块数的问题,通过C语言来实现。假设有一个二维数组表示一个地图,其中1代表陆地,0代表海洋,相邻的

用C语言编程计算小岛区块数

在计算机编程中,通常可以用C语言来解决各种问题。下面我们来看一个关于计算小岛区块数的问题,通过C语言来实现。

假设有一个二维数组表示一个地图,其中1代表陆地,0代表海洋,相邻的陆地(包括斜对角线方向)被认为是属于同一个小岛区块,请编写一个C程序,计算出总共有多少个小岛区块。

例如,给定地图如下:

1 1 0 0 0

1 1 0 0 0

0 0 1 0 0

0 0 0 1 1

根据上面的地图,共有3个小岛区块。

要解决这个问题,可以采用深度优先搜索(DFS)的方法。具体步骤如下:

  • 遍历地图的每一个格子,如果该格子为1且未被访问过,则对其进行深度优先搜索。
  • 在深度优先搜索的过程中,将所有与当前格子相连的陆地都标记为已访问过。
  • 每次完成一次深度优先搜索,即找到了一个小岛区块。
  • ```c

    include

    define ROWS 4

    define COLS 5

    int visited[ROWS][COLS];

    void dfs(int grid[ROWS][COLS], int row, int col) {

    if (row < 0 || row >= ROWS || col < 0 || col >= COLS || grid[row][col] == 0 || visited[row][col]) {

    return;

    }

    visited[row][col] = 1;

    dfs(grid, row 1, col);

    dfs(grid, row1, col);

    dfs(grid, row, col 1);

    dfs(grid, row, col1);

    }

    int countIslands(int grid[ROWS][COLS]) {

    int count = 0;

    for (int i = 0; i < ROWS; i ) {

    for (int j = 0; j < COLS; j ) {

    if (grid[i][j] == 1 && !visited[i][j]) {

    count ;

    dfs(grid, i, j);

    }

    }

    }

    return count;

    }

    int main() {

    int grid[ROWS][COLS] = {

    {1, 1, 0, 0, 0},

    {1, 1, 0, 0, 0},

    {0, 0, 1, 0, 0},

    {0, 0, 0, 1, 1}

    };

    printf("Number of islands: %d\n", countIslands(grid));

    return 0;

    }

    ```

    使用上述代码,可以得到给定地图中小岛区块的个数。

    希望以上内容能帮助你解决C语言编程中关于计算小岛区块数的问题!

    Tags: 微信红包外挂

    最近发表

    icp沪ICP备2023033053号-25
    取消
    微信二维码
    支付宝二维码

    目录[+]