您的位置:首页 > 其它

算法分析与设计丨第六周丨LeetCode(9)——Course Schedule(Medium)

2017-10-10 16:48 495 查看
拓扑排序

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

上周国庆休息,这周继续作业。

这题用到了拓扑排序,都是以前数据结构说到的方法,看来得把书拿出来翻一翻了。

#include<iostream>
#include<vector>
#include<queue>
using namespace std;

class Solution {
public:
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {

vector<int> indegree(numCourses,0);//用来存储入度
vector<vector<int>> graph(numCourses,vector<int>(0));//用来存储每个结点指向哪些结点

for(auto i : prerequisites)//auto很好用
{
graph[i.second].push_back(i.first);//注意顺序,是后面的结点指向前面的结点
indegree[i.first]++;//pair是用first和second
}

queue<int> my_que;//用来放入度为零的点,表示没有其他点指着它了

for(int i = 0;i < numCourses;++i)
{
if(indegree[i] == 0)
my_que.push(i);
}

while(!my_que.empty())
{
int temp = my_que.front();
my_que.pop();

for(auto i : graph[temp])
{
--indegree[i];

if(indegree[i] == 0)//每当一个点的入度减为零,就放进队列
my_que.push(i);
}

}

for(int i = 0;i < numCourses;++i)
{
if(indegree[i] != 0)/还有入度不为零的就说明有环存在
return false;
}

return true;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐