207&210. Course Schedule
来源:互联网 发布:手机电池修复软件下载 编辑:程序博客网 时间:2024/05/30 12:03
一、题目简述
- 共有
n 门课需要选择,使用0……n−1 进行标记。其中部分课程存在依赖关系,例如课程0必须在修学过课程1的基础上可以上,使用对[0,1] 表示。 - 给定课程数量和依赖关系对,返回完成所有课程的顺序。 存在多种可能的正确顺序,只需返回其中一个即可,如果无法完成所有课程,则返回一个空序列。
例如:输入
输入
二、编程思路
- 本题将课程作为节点,课程之间的前置关系作为有向边,对给出的图进行拓扑排序即可。
- 在拓扑排序过程中需要记录每个节点是否被访问过,及入度信息。分别使用
is_vst 与in_dg 两个数组记录。 - 首先计算每个节点的入度,之后每次选出入度为零且未被访问过的节点
p ,找到由p 出发的有向边,将其终点的入度减1,将节点p 放入存放路径的vector vst_seq 中之后重复进行循环。直到所有的节点都被访问完毕,返回vst_seq ;若未访问过的节点的入度都不为零,说明图中存在环,返回空vector
三、程序设计
class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int> >& prerequisites) { int in_dg[numCourses]={0};//in degree bool is_vst[numCourses]={false}; vector<int> vst_seq; for(int i=0;i<prerequisites.size();i++){ in_dg[prerequisites[i].first]++; } while(1){ // for(int i=0;i<numCourses;i++){ // cout<<in_dg[i]<<" "; // } // cout<<endl; // cout<<"in while"<<endl; bool is_all_vst=true; for(int k=0;k<numCourses;k++){ if(!is_vst[k]){ is_all_vst=false; break; } } if(is_all_vst){ return vst_seq; // return true; } int i; for(i=0;i<numCourses;i++){ if((!in_dg[i]) && (!is_vst[i])){ vst_seq.push_back(i); is_vst[i]=true; break; } } // cout<<i<<endl; if(i==numCourses){ vector<int> v; return v; // return false; } for(int j=0;j<prerequisites.size();j++){ if(prerequisites[j].second==i){ in_dg[prerequisites[j].first]--; } } } }};
四、实验心得
本题中使用
0 0
- 207&210. Course Schedule
- LeetCode-207&210.Course Schedule
- 207Course Schedule 210Course Schedule II
- 207,210. Course Schedule I, II
- Leetcode-210.Course Schedule
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II**
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- python 多次 转义问题
- 简单好用用js就可以保存文本文件到本地
- 【python爬虫】python爬虫入门攻略(1)
- 奇数位丢弃
- Android一起学Ui(1)----(折叠布局)
- 207&210. Course Schedule
- 风险管理图与四六级步骤
- 【深入Java虚拟机】之二:Class类文件结构
- java反射
- 【Maven】2、Maven安装
- 线程间通信学习笔记
- mysql函数实现省市的分组
- 如何在命令行程序中运行Java程序
- 不允许创建临时变量,交换两个数的内容