📅  最后修改于: 2023-12-03 14:55:33.872000             🧑  作者: Mango
这个 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 中使用 DFS 查找岛屿数量的程序。通过深度优先搜索算法,你可以方便地找到给定矩阵中的岛屿数量,并进行相应的处理和分析。