1
+ package com.blankj.medium._1462
2
+
3
+ import com.blankj.ext.print
4
+ import com.blankj.structure.MultiDimensionArray
5
+
6
+ class Solution {
7
+ fun checkIfPrerequisite (numCourses : Int , prerequisites : Array <IntArray >, queries : Array <IntArray >): List <Boolean > {
8
+ val graph = mutableMapOf<Int , MutableList <Int >>()
9
+ repeat(numCourses) { graph[it] = mutableListOf () }
10
+ val inDegree = IntArray (numCourses)
11
+ // isPre[i][j] 记录了 i 是否是 j 的先修课
12
+ val isPre = Array (numCourses) { BooleanArray (numCourses) }
13
+ for (prerequisite in prerequisites) {
14
+ ++ inDegree[prerequisite[1 ]]
15
+ graph[prerequisite[0 ]]!! .add(prerequisite[1 ])
16
+ }
17
+ val queue = ArrayDeque <Int >()
18
+ queue.addAll(inDegree.indices.filter { inDegree[it] == 0 })
19
+ while (queue.isNotEmpty()) {
20
+ val cur = queue.removeFirst()
21
+ for (next in graph[cur]!! ) {
22
+ isPre[cur][next] = true
23
+ // 遍历更新先修课的先修课到当前课程的状态
24
+ for (i in 0 until numCourses) {
25
+ isPre[i][next] = isPre[i][next] or isPre[i][cur]
26
+ }
27
+ -- inDegree[next]
28
+ if (inDegree[next] == 0 ) {
29
+ queue.add(next)
30
+ }
31
+ }
32
+ }
33
+ val res = mutableListOf<Boolean >()
34
+ for (query in queries) {
35
+ res.add(isPre[query[0 ]][query[1 ]])
36
+ }
37
+ return res
38
+ }
39
+ }
40
+
41
+ fun main () {
42
+ Solution ().checkIfPrerequisite(
43
+ 2 ,
44
+ MultiDimensionArray .createTestData(" [[1,0]]" ),
45
+ MultiDimensionArray .createTestData(" [[0,1],[1,0]]" ),
46
+ ).print ()
47
+
48
+ Solution ().checkIfPrerequisite(
49
+ 2 ,
50
+ emptyArray(),
51
+ MultiDimensionArray .createTestData(" [[1,0],[0,1]]" ),
52
+ ).print ()
53
+
54
+ Solution ().checkIfPrerequisite(
55
+ 3 ,
56
+ MultiDimensionArray .createTestData(" [[1,2],[1,0],[2,0]]" ),
57
+ MultiDimensionArray .createTestData(" [[1,0],[1,2]]" ),
58
+ ).print ()
59
+ }
0 commit comments