4 - BFS & Topological Algorithm
615. Course Schedule
https://www.lintcode.com/problem/course-schedule/description?_from=ladder&&fromId=1
为什么不可以用 for(int[] prerequisite: prerequisites) 呢 (使用Leetcode上的方法)?因为当 prerequisites 的 length 很大的时候,会超时。所以要定义一个edges[]变量,用来记录每一门课程的后续课程。
要注意数据类型的转换:
int pointer = (int)edges[curr].get(i);
                indegree[pointer]--;
public class Solution {
    /*
     * @param numCourses: a total of n courses
     * @param prerequisites: a list of prerequisite pairs
     * @return: true if can finish all courses or false
     */
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        // write your code here
        if(prerequisites == null || prerequisites.length == 0 || prerequisites[0].length == 0) {
            return true;
        }
        List[] edges = new List[numCourses];
        int[] indegree = new int[numCourses];
        int count = 0;
        Queue<Integer> queue = new LinkedList<>();
        for(int i = 0; i < numCourses; i++) {
            edges[i] = new LinkedList<>();
        }
        int len = prerequisites.length;
        for(int i = 0; i < len; i++) {
            indegree[prerequisites[i][0]]++;
            edges[prerequisites[i][1]].add(prerequisites[i][0]);
        }
        for(int i = 0; i < numCourses; i++) {
            if(indegree[i] == 0) {
                queue.offer(i);
            }
        }
        while(!queue.isEmpty()) {
            int curr = queue.poll();
            count++;
            int n = edges[curr].size();
            for(int i = 0; i < n; i++) {
                int pointer = (int)edges[curr].get(i);
                indegree[pointer]--;
                if(indegree[pointer] == 0) {
                    queue.offer(pointer);
                }
            }
        }
        return count == numCourses;
    }
}
616. Course Schedule II
https://www.lintcode.com/problem/course-schedule-ii/description?_from=ladder&&fromId=1
public class Solution {
    /*
     * @param numCourses: a total of n courses
     * @param prerequisites: a list of prerequisite pairs
     * @return: the course order
     */
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        // write your code here
        int[] result = new int[numCourses];
        List[] edges = new List[numCourses];
        int[] indegree = new int[numCourses];
        int count = 0;
        Queue<Integer> queue = new LinkedList<>();
        for(int i = 0; i < numCourses; i++) {
            edges[i] = new LinkedList<>();
        }
        int len = prerequisites.length;
        for(int i = 0; i < len; i++) {
            indegree[prerequisites[i][0]]++;
            edges[prerequisites[i][1]].add(prerequisites[i][0]);
        }
        for(int i = 0; i < numCourses; i++) {
            if(indegree[i] == 0) {
                queue.offer(i);
            }
        }
        while(!queue.isEmpty()) {
            int curr = queue.poll();
            result[count] = curr;
            count++;
            int n = edges[curr].size();
            for(int i = 0; i < n; i++) {
                int pointer = (int)edges[curr].get(i);
                indegree[pointer]--;
                if(indegree[pointer] == 0) {
                    queue.offer(pointer);
                }
            }
        }
        if(count != numCourses) {
            return new int[0];
        }
        return result;
    }
}
4 - BFS & Topological Algorithm的更多相关文章
- PAT 天梯杯 L3-008. 喊山 bfs
		L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ... 
- LMAO?
		70 weeks to finish TC problems? 2015.4.16 week1 week1~week8:Graph 1.DFS,BFS,Topological sort,Strongl ... 
- CSU1321+SPFA
		简单题 /* 简单的bfs */ #include<algorithm> #include<iostream> #include<string.h> #includ ... 
- bzoj 1085: [SCOI2005]骑士精神
		Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ... 
- algorithm@ find the shortest path in a graph using BFS
		Finding Shortest Paths By BFS 
- Algorithm --> DFS和BFS
		定义结点 struct MGraph { int vexs[MAXVEX]; //顶点数组 int arc[MAXVEX][MAXVEX]; //邻接矩阵 int numVertex, numEdge ... 
- [Algorithm] BFS vs DFS
		//If you know a solution is not far from the root of the tree: BFS, because it is faster to get clos ... 
- Robots on a grid(DP+bfs())
		链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=25585 Current Server Time: 2013-08-27 20:42:26 Ro ... 
- BFS总结
		能够用 BFS 解决的问题,一定不要用 DFS 去做! 因为用 Recursion 实现的 DFS 可能造成 StackOverflow! (NonRecursion 的 DFS 一来你不会写,二来面 ... 
随机推荐
- python实现可以被with上下文管理的类或函数
			# .开始之前先明确一下with机制 # 1.类包函数__enter__()和__exit__()函数,即是可以被上下文管理的类 # __enter__用来执行with时的方法,__exit__返 ... 
- java生成二维码工具类
			package com.runtime.extend.utils.CodeCreate; import com.google.zxing.*;import com.google.zxing.commo ... 
- iOS 如何在自定义类中支持 "[]" 运算符
			在相应类中实现如下协议即可. 1.字典类 - (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key; - (void)setObj ... 
- win10配置环境变量
- wpf treeview 数据绑定 递归绑定节点
			1.先上效果 将所有节点加入ComboBox数据源,在ComboBox中选择时下方Treeview显示该节点下的子节点. 1.xaml文件,将以下代码加入界面合适位置 <StackPanel&g ... 
- 帮助Bsny(乱搞做法)
			帮助Bsny 题目描述 Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30, ... 
- python 类的属性__slots__ (了解一点点)
			当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 优点: 1)更快的属性访问速度 2)减少内存消耗 3)限定一个类创建的实例只能有固定的实例属性(实例变量),不允许对象添加 ... 
- pthread_cond_wait虚假唤醒
			pthread_cond_wait中的while()不仅仅在等待条件变量前检查条件cond_is_false是否成立,实际上在等待条件变量后也检查条件cond_is_false是否成立.在多线程等待的 ... 
- VUE引入字体图标库
			1. 下载阿里图标 2. 解压文件,并复制文件到VUE项目内 3. 找到添加的字体图标的.css文件,将.iconfont改成[class^="iconfont"], [class ... 
- C++环境设置
			g++ -V #include <iostream> int main() { std::cout << "Hello World!\n"; return ... 
