Skip to content

Commit e3abacc

Browse files
committed
课程表
1 parent f662a61 commit e3abacc

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
| 198 | 动态规划 | [打家劫舍](src/main/java/algorithm/leetcode/Solution198.java) | 简单 |
9595
| 200 | 深度优先搜索、广度优先搜索、并查集 | [岛屿的个数](src/main/java/algorithm/leetcode/Solution200.java) | 中等 |
9696
| 206 | 链表 | [反转链表](src/main/java/algorithm/leetcode/Solution206.java) | 简单 |
97+
| 207 | 深度优先搜索、广度优先搜索、图、拓扑排序 | [课程表](src/main/java/algorithm/leetcode/Solution207.java) | 中等 |
9798
| 209 | 数组、双指针、二分查找 | [长度最小的子数组](src/main/java/algorithm/leetcode/Solution209.java) | 中等 |
9899
| 211 | 设计、字典数、回溯算法 | [添加与搜索单词 - 数据结构设计](src/main/java/algorithm/leetcode/Solution211.java) | 中等 |
99100
| 212 | 字典数、回溯算法 | [单词搜索 II](src/main/java/algorithm/leetcode/Solution212.java) | 困难 |
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package algorithm.leetcode;
2+
3+
import java.util.LinkedList;
4+
5+
/**
6+
* @author: mayuan
7+
* @desc: 课程表
8+
* @date: 2019/03/13
9+
*/
10+
public class Solution207 {
11+
public boolean canFinish(int numCourses, int[][] prerequisites) {
12+
// matrix[i][j]=1 表示 第i门课是第j门课的先行课
13+
int[][] matrix = new int[numCourses][numCourses];
14+
// indegree[i] 表示第i个课程有几门先行课
15+
int[] indegree = new int[numCourses];
16+
17+
for (int i = 0; i < prerequisites.length; ++i) {
18+
int ready = prerequisites[i][0];
19+
int pre = prerequisites[i][1];
20+
if (0 == matrix[pre][ready]) {
21+
++indegree[ready];
22+
}
23+
matrix[pre][ready] = 1;
24+
}
25+
26+
int count = 0;
27+
LinkedList<Integer> queue = new LinkedList<>();
28+
for (int i = 0; i < indegree.length; ++i) {
29+
if (0 == indegree[i]) {
30+
queue.addLast(i);
31+
}
32+
}
33+
34+
while (!queue.isEmpty()) {
35+
int course = queue.pollFirst();
36+
++count;
37+
for (int i = 0; i < numCourses; ++i) {
38+
if (0 != matrix[course][i]) {
39+
if (--indegree[i] == 0) {
40+
queue.addLast(i);
41+
}
42+
}
43+
}
44+
}
45+
return count == numCourses;
46+
}
47+
}

0 commit comments

Comments
 (0)