207 Course Schedule
2015-11-28 07:29
357 查看
参考了geeksforgeeks 有向图寻找环。代码如下:
public class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { if (prerequisites == null || prerequisites.length == 0) { return true; } Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>(); for (int i = 0; i < prerequisites.length; i++) { int[] pair = prerequisites[i]; int from = pair[1]; int to = pair[0]; if (map.containsKey(from)) { map.get(from).add(to); } else { List<Integer> list = new ArrayList<Integer>(); list.add(to); map.put(from, list); // map 0, <1> || 1, empty } if (!map.containsKey(to)) { map.put(to, new ArrayList<Integer>()); } } boolean[] visited = new boolean[numCourses]; boolean[] recStack = new boolean[numCourses]; for (int i : map.keySet()) { if (isCyclic(i, visited, recStack, map)) { return false; } } return true; } private boolean isCyclic(int v, boolean[] visited, boolean[] recStack, Map<Integer, List<Integer>> map) { if (!visited[v]) { visited[v] = true; recStack[v] = true; List<Integer> adj = map.get(v); for (int i = 0; i < adj.size(); i++) { int num = adj.get(i); if (!visited[num] && isCyclic(num, visited, recStack, map)) { return true; } else if (recStack[num]) { return true; } } } recStack[v] = false; return false; } }
相关文章推荐
- js的Boolean对象初始值示例
- 简介JavaScript中Boolean.toSource()方法的使用
- 基于JavaScript 数据类型之Boolean类型分析介绍
- Python中使用Boolean操作符做真值测试实例
- php中的boolean(布尔)类型详解
- 黑马程序员--Java内部类的使用小结
- 在vs编译的时候 出现 boolean 重定义
- 七星彩选号
- 马士兵Java课堂笔记-2-基本数据类型转换问题
- java的数据类型
- 黑马程序员--IO流(3)
- “黑马程序员"File
- “黑马程序员"Properties PrintWriter 合并流 切割
- 黑马程序员第二天 基本数据类型
- java基础-程序流程控制
- python中神奇的boolean型变量
- NO3.java学习笔记(顺序结构、判断结构、选择结构、循环结构、函数)
- Java第四章【流程控制与数组、数组的操作【遍历、排序、查找】】
- 用户输入一个时间,判断这个时间是本年的多少天(例:输入2015-1-5,结果是2015年的第5天)
- 判断一个对象是否可以进行for in穷举