-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1462. Course Schedule IV #1233
Comments
We can use a graph representation and the Floyd-Warshall algorithm to compute whether each course is reachable from another course. This approach will efficiently handle the prerequisite relationships and allow us to answer the queries directly. Let's implement this solution in PHP: 1462. Course Schedule IV <?php
/**
* @param Integer $numCourses
* @param Integer[][] $prerequisites
* @param Integer[][] $queries
* @return Boolean[]
*/
function checkIfPrerequisite($numCourses, $prerequisites, $queries) {
// Step 1: Initialize the graph with false values
$isReachable = array_fill(0, $numCourses, array_fill(0, $numCourses, false));
// Step 2: Fill the graph with direct prerequisites
foreach ($prerequisites as $prerequisite) {
$isReachable[$prerequisite[0]][$prerequisite[1]] = true;
}
// Step 3: Use Floyd-Warshall algorithm to calculate transitive closure
for ($k = 0; $k < $numCourses; $k++) {
for ($i = 0; $i < $numCourses; $i++) {
for ($j = 0; $j < $numCourses; $j++) {
if ($isReachable[$i][$k] && $isReachable[$k][$j]) {
$isReachable[$i][$j] = true;
}
}
}
}
// Step 4: Answer the queries
$result = [];
foreach ($queries as $query) {
$result[] = $isReachable[$query[0]][$query[1]];
}
return $result;
}
// 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]
?> Explanation:
Complexity:
Example Walkthrough:Input:$numCourses = 3;
$prerequisites = [[1, 2], [1, 0], [2, 0]];
$queries = [[1, 0], [1, 2]]; Execution:
Output:[true, true] |
…1522200250 Co-authored-by: kovatz <[email protected]> Co-authored-by: topugit <[email protected]> Co-authored-by: basharul-siddike <[email protected]> Co-authored-by: hafijul233 <[email protected]>
Discussed in #1232
Originally posted by mah-shamim January 27, 2025
Topics:
Depth-First Search
,Breadth-First Search
,Graph
,Topological Sort
There are a total of
numCourses
courses you have to take, labeled from0
tonumCourses - 1
. You are given an arrayprerequisites
whereprerequisites[i] = [ai, bi]
indicates that you must take courseai
first if you want to take coursebi
.[0, 1]
indicates that you have to take course0
before you can take course1
.Prerequisites can also be indirect. If course
a
is a prerequisite of courseb
, and courseb
is a prerequisite of coursec
, then coursea
is a prerequisite of coursec
.You are also given an array
queries
wherequeries[j] = [uj, vj]
. For thejth
query, you should answer whether courseuj
is a prerequisite of coursevj
or not.Return a boolean array
answer
, whereanswer[j]
is the answer to thejth
query.Example 1:
Course 0 is not a prerequisite of course 1, but the opposite is true.
Example 2:
Example 3:
Constraints:
2 <= numCourses <= 100
0 <= prerequisites.length <= (numCourses * (numCourses - 1) / 2)
prerequisites[i].length == 2
0 <= ai, bi <= numCourses - 1
ai != bi
[ai, bi]
are unique.1 <= queries.length <= 104
0 <= ui, vi <= numCourses - 1
ui != vi
Hint:
The text was updated successfully, but these errors were encountered: