LeetCode-Course Schedule-解题报告

原创 2015年07月08日 18:28:33

原题链接 https://leetcode.com/problems/course-schedule/

There are a total of n courses you have to take, labeled from 0 to n - 1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

For example:

2, [[1,0]]

There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.

2, [[1,0],[0,1]]

There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.


如果存在环路就肯定不存在拓扑排序,开始想用并查集判断环路,然而并查集只适用于无向图。可能需要做一些修改(并没尝试过)。

其实用一次dfs就行了,尝试一次存不存在拓扑排序,判断输出节点的个数和节点总数的情况。


class Solution {
public:
    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
        vector<vector<int> >graph(numCourses);
		vector<int>out(numCourses, 0);
	    int num = 0;
		vector<bool>vis(numCourses, 0);
		for (auto &p : prerequisites)
			graph[p.second].push_back(p.first), out[p.first]++;
		dfs(graph, num, vis, out);
		return num == numCourses;
	}
	void dfs(vector<vector<int> >& g, int& num, vector<bool>& vis, vector<int>& out)
	{
		if (num == g.size())return;
		for (int i = 0; i < g.size(); ++i)
		{
			if (!vis[i] && out[i] == 0)
			{
				num++;
				vis[i] = true;
				for (int j = 0; j < g[i].size(); ++j)
					--out[g[i][j]];
				dfs(g, num, vis, out);
			}
		}
	}
};


LeetCode-Course Schedule-解题报告

原题链接 https://leetcode.com/problems/course-schedule/ There are a total of n courses you have to ta...
  • dd523762588
  • dd523762588
  • 2015年07月08日 18:09
  • 207

poj解题报告——2313

开始假设b[i] = a[i](1 Mid(b[i - 1], a[i], b[i + 1]) (2
  • Lingfu74
  • Lingfu74
  • 2015年07月28日 13:36
  • 555

**LeetCode-Course Schedule

拓扑排序 假如有topo order 那么就说明无环 就可以实现 拓普排序的方法就是记录一个indegree 每次把indegree为0的入queue 然后那一个出来 把从这个节点出来的edge都去...
  • bsbcarter
  • bsbcarter
  • 2015年09月29日 09:43
  • 157

leetcode-Course Schedule

题目:leetcode Course Schedule There are a total of n courses you have to take, labeled from 0 ...
  • bupt8846
  • bupt8846
  • 2015年05月06日 23:40
  • 674

NOIP2016提高组解题报告

D1T1玩具谜题   模拟 D1T2天天爱跑步   LCA,树链剖分 D1T3换教室  DP,数学期望,最短路 D2T1组合数问题   数学 D2T2蚯蚓   单调队列,模拟 D2T...
  • qwerty1125
  • qwerty1125
  • 2017年09月10日 20:42
  • 274

算法分析与设计解题报告

解题报告格式:         ①原题中文大意; ②算法思想及解题用到的主要数据结构; ③详细解题思路; ④逐步求精算法描述(含过程及变量说明); ⑤程序注释清单(重要过程的说明); ⑥...
  • u011394079
  • u011394079
  • 2014年09月24日 11:42
  • 255

schedule-调度器

1.1.1 进程的基本知识  1. 调度类型   每个Linux进程总是按照下面的调度类型被调度: l SCHED_FIFO  这是先进先出的实时进程。当调度程序把CPU分配给进程的时候,...
  • farmwang
  • farmwang
  • 2017年04月13日 17:46
  • 348

HDU 1254 推箱子 解题报告

HDU 1254的解题报告
  • lawk97
  • lawk97
  • 2016年09月05日 10:17
  • 388

C语言解题报告模板

问题及代码:/* Copyright (c) 2014, 烟台大学计算机学院 All rights reserved. 文件名称:test.cpp 作 者:贺利坚 完成日期:201...
  • sxhelijian
  • sxhelijian
  • 2016年09月17日 11:10
  • 783

LeetCode-Course Schedule II

算法分析与设计,第12周博客 210. Course Schedule II There are a total of n courses you have to take, labe...
  • MroningK
  • MroningK
  • 2017年11月23日 21:11
  • 54
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode-Course Schedule-解题报告
举报原因:
原因补充:

(最多只允许输入30个字)