php - 生成图和 PHP_INT_MAX
问题描述
我正在阅读“PHP 7 数据结构和算法”一章“使用 Floyd-Warshall 算法的最短路径”,作者正在使用以下代码生成图表:
$totalVertices = 5;
$graph = [];
for ($i = 0; $i < $totalVertices; $i++) {
for ($j = 0; $j < $totalVertices; $j++) {
$graph[$i][$j] = $i == $j ? 0 : PHP_INT_MAX;
}
}
我不明白这一行:
$graph[$i][$j] = $i == $j ? 0 : PHP_INT_MAX;
看起来像单行 if 语句
是一样的吗?
if ($i == $j) {
$graph[$i][$j] = 0;
} else {
$graph[$i][$j] = PHP_INT_MAX;
}
使用 PHP_INT_MAX 有什么意义?最后这张图是什么样子的?
解决方案
你在这里有两个问题。
首先是关于语法condition ? val_if_true : val_if_false
。这称为“三元运算符”。您对行为的评估是正确的。
二是关于使用PHP_INT_MAX
。两个节点之间的所有距离都被初始化为两个值之一:0
如果节点i
和j
是相同的节点(即顶点),以及PHP_INT_MAX
如果节点不相同(即边)。也就是说,一个节点到它自己的距离是0
,一个节点到任何其他节点的距离是 PHP 识别的最大整数值。原因是 Floyd-Warshall 算法利用“无穷大”的概念来表示尚未计算的最小距离,但由于 PHP 中没有“无穷大”的概念,所以以该值PHP_INT_MAX
作为立场-为此。
推荐阅读
- python - 在 Python shell 工作中获取当前工作角色 - Aws Glue
- c - 如何在C中的索引处替换1个数组值
- unity3d - 为什么我的立方体材质在 Unity 3D 中只是黑色?
- javascript - 在 MySQL 中获取错误的时间值
- flutter - Flutter Navigator.push -> 第二页不使用新值刷新状态
- sql - 返回多于 1 行的子查询:SQL Server
- c# - 如何在 C# Web 表单应用程序的回发时保持侧导航栏隐藏?
- python - sqlalchemy.exc.InvalidRequestError:触发映射器:'映射类用户->用户'。最初的例外是:“flaskblog.Post”类未映射
- botframework - MSbot 的 MS Teams 语言选择
- python - 如何在 Pandas 中获取数据框中的确切行号?