1462。课程表四
难度:中等
主题:深度优先搜索、广度优先搜索、图、拓扑排序
您必须修读总共 numCourses 课程,标记为从 0 到 numCourses - 1。您将获得一个数组先决条件,其中先决条件[i] = [ai, bi ] 表示您必须首先学习课程ai,如果您想参加课程bi.
先决条件也可以是间接。如果课程a是课程b的先决条件,课程b是课程c的先决条件,那么课程a是课程c的先决条件。
您还会获得一个数组查询,其中querys[j] = [uj, vj]。对于第 jth 查询,您应该回答课程 uj 是否是课程 vj 的先决条件。
返回一个布尔数组答案,其中answer[j]是第j第查询的答案。
示例1:
示例2:
示例 3:
约束:
提示:
解决方案:
我们可以使用A图表>和floyd-warshall算法来计算是否可以从另一个课程到达每个课程。这种方法将有效地处理先决条件,并允许我们直接回答查询。
>>让我们在PHP中实现此解决方案:
<?php /** * @param Integer $numCourses * @param Integer[][] $prerequisites * @param Integer[][] $queries * @return Boolean[] */ function checkIfPrerequisite($numCourses, $prerequisites, $queries) { ... ... ... /** * go to ./solution.php */ } // Example usage: $numCourses = 2; $prerequisites = [[1,0]]; $queries = [[0,1],[1,0]]; $result = checkIfPrerequisite($numCourses, $prerequisites, $queries); print_r($result); // Output: [false,true] $numCourses = 2; $prerequisites = []; $queries = [[1,0],[0,1]] $result = checkIfPrerequisite($numCourses, $prerequisites, $queries); print_r($result); // Output: [false,false] $numCourses = 3; $prerequisites = [[1, 2], [1, 0], [2, 0]]; $queries = [[1, 0], [1, 2]]; $result = checkIfPrerequisite($numCourses, $prerequisites, $queries); print_r($result); // Output: [true, true] ?>
图初始化:
该算法计算图形的及传递闭合。
复杂:
$numCourses = 3; $prerequisites = [[1, 2], [1, 0], [2, 0]]; $queries = [[1, 0], [1, 2]];
$isReachable = [ [false, false, false], [false, false, true], [false, false, false] ];
$isReachable = [ [false, false, false], [true, false, true], [true, false, false] ];
[true, true]
>
LinkedIngithub
以上是课程时间表IV的详细内容。更多信息请关注PHP中文网其他相关文章!