码迷,mamicode.com
首页 > 其他好文 > 详细

207. Course Schedule

时间:2016-07-22 06:25:32      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

拓扑排序,算法如下:

 1 L -> 排好序的点
 2 S -> 所有没有incoming的点
 3 当S不为空时:
 4   从S中拿出一个点n
 5   把n加入L
 6   对于每个由n->m得到节点m:
 7     把这条边从图里删除
 8     如果m也没有incoming的边了
 9       把m加入S
10 如果图中仍然有边
11   返回error(图中至少有一个环)
12 否则
13   返回L
 1     public boolean canFinish(int numCourses, int[][] prerequisites) {
 2         if(numCourses < 1) {
 3             return false;
 4         }
 5         int len = prerequisites.length;
 6         int[] indegree = new int[numCourses];
 7         Queue<Integer> queue = new LinkedList<Integer>();
 8         List<Integer> results = new ArrayList<Integer>();
 9         for(int i = 0; i < len; i++) {
10             indegree[prerequisites[i][1]]++;
11         }
12         for(int i = 0; i < numCourses; i++) {
13             if(indegree[i] == 0) {
14                 queue.offer(i);
15             }
16         }
17         while(!queue.isEmpty()) {
18             int cur = queue.poll();
19             results.add(cur);
20             for(int i = 0; i < len; i++) {
21                 if(prerequisites[i][0] == cur) {
22                     int node = prerequisites[i][1];
23                     indegree[node]--;
24                     if(indegree[node] == 0) {
25                         queue.offer(node);
26                     }
27                 }
28             }
29         }
30         for(int i = 0; i < numCourses; i++) {
31             if(indegree[i] != 0) {
32                 return false;
33             }
34         }
35         return true;
36     }

 

207. Course Schedule

标签:

原文地址:http://www.cnblogs.com/warmland/p/5693725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!