📜  查找岛屿数量的PHP程序|设置 1(使用 DFS)(1)

📅  最后修改于: 2023-12-03 14:55:33.872000             🧑  作者: Mango

查找岛屿数量的 PHP 程序 | 使用 DFS

简介

这个 PHP 程序使用深度优先搜索(DFS)算法来查找给定矩阵中的岛屿数量。岛屿是由水平或垂直相邻的格子组成的连续区域。这个程序会将岛屿的数量作为返回值,以便后续的处理和分析。

程序实现

以下是一个使用 DFS 算法在 PHP 中查找岛屿数量的程序:

/**
 * 使用 DFS 查找岛屿数量
 * 
 * @param array $grid 岛屿的二维矩阵
 * @return int 岛屿的数量
 */
function findIslandCount(array $grid): int {
    $rows = count($grid);
    if ($rows == 0) {
        return 0;
    }
    
    $cols = count($grid[0]);

    $count = 0;
    for ($i = 0; $i < $rows; $i++) {
        for ($j = 0; $j < $cols; $j++) {
            if ($grid[$i][$j] == '1') {
                $count++;
                dfs($grid, $i, $j);
            }
        }
    }

    return $count;
}

/**
 * 深度优先搜索
 * 
 * @param array $grid 岛屿的二维矩阵
 * @param int $row 当前位置的行索引
 * @param int $col 当前位置的列索引
 */
function dfs(array &$grid, int $row, int $col): void {
    $rows = count($grid);
    $cols = count($grid[0]);

    // 判断当前位置是否在岛屿内,如果不是则返回
    if (
        $row < 0 || $col < 0 || 
        $row >= $rows || $col >= $cols ||
        $grid[$row][$col] != '1'
    ) {
        return;
    }

    // 将当前位置标记为访问过
    $grid[$row][$col] = '0';

    // 递归搜索当前位置的上下左右四个方向
    dfs($grid, $row + 1, $col);
    dfs($grid, $row - 1, $col);
    dfs($grid, $row, $col + 1);
    dfs($grid, $row, $col - 1);
}
使用示例

你可以将上述代码保存到一个 PHP 文件中,并通过调用 findIslandCount() 函数来查找给定矩阵中岛屿的数量。例如:

$grid = [
    ['1', '1', '0', '0', '0'],
    ['1', '1', '0', '0', '0'],
    ['0', '0', '1', '0', '0'],
    ['0', '0', '0', '1', '1']
];

$count = findIslandCount($grid);
echo "岛屿的数量为:".$count;

上述示例中,我们定义了一个二维矩阵 $grid,其中 '1' 表示岛屿,'0' 表示水域。运行程序后,将输出岛屿的数量。

注意事项
  • 必须按照函数的定义和参数传递正确的二维矩阵。
  • 请确保 PHP 环境正确安装和配置。

以上就是一个在 PHP 中使用 DFS 查找岛屿数量的程序。通过深度优先搜索算法,你可以方便地找到给定矩阵中的岛屿数量,并进行相应的处理和分析。