当前位置:网站首页>leetcode207.课程表(判断有向图是否有环)
leetcode207.课程表(判断有向图是否有环)
2022-07-30 12:26:00 【深海里的鱼(・ω<)*】
方法一:拓扑排序
class Solution {
public:
vector<vector<int>> get_adj_list(int numCourses,vector<vector<int>> &prerequisites){
//获得图的邻接表
vector<vector<int>> graph(numCourses);
for(auto &e:prerequisites){
graph[e[0]].push_back(e[1]);
}
return graph;
}
bool topo_sort(vector<vector<int>> &graph){
//拓扑排序判断是否有环
int cnt=0;//拓扑序列中的顶点个数
int num_v=graph.size();//图中顶点个数
vector<int> deg(num_v);//各个顶点的度
stack<int> st;//存入度为0的顶点
//计算各个顶点的度
for(int i=0;i<num_v;i++){
for(auto &v:graph[i]){
deg[v]++;
}
}
//将入度为0的顶点入栈
for(int i=0;i<deg.size();i++){
if(deg[i]==0){
st.push(i);
}
}
while(!st.empty()){
int v=st.top(); //顶点v
st.pop();
cnt++;
for(auto &i:graph[v]){
//去掉顶点v看看是否会产生度为0的顶点
deg[i]--;
if(deg[i]==0){
st.push(i);
}
}
}
if(cnt<num_v){
return false;
}
else{
return true;
}
}
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
auto adj_list=get_adj_list(numCourses,prerequisites);
return topo_sort(adj_list);
}
};
方法二:dfs深搜
class Solution {
public:
vector<vector<int>> get_adj_list(int numCourses,vector<vector<int>> &prerequisites){
//获得图的邻接表
vector<vector<int>> graph(numCourses);
for(auto &e:prerequisites){
graph[e[0]].push_back(e[1]);
}
return graph;
}
void dfs(vector<vector<int>> &graph,int u,vector<int> &vis,vector<int> &in_dfs,bool &loop){
if(loop){
//检测到环
return ;
}
in_dfs[u]=1;
vis[u]=1;
for(auto &v:graph[u]){
if(in_dfs[v]){
//如果这个顶点在本次dfs中
loop=true;
return ;
}
if(!vis[v]){
//如果这个顶点还未访问过
dfs(graph,v,vis,in_dfs,loop);
}
}
in_dfs[u]=0;
}
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
auto graph=get_adj_list(numCourses,prerequisites);
vector<int> vis(numCourses);
vector<int> in_dfs(numCourses);
bool loop=false;
for(int i=0;i<numCourses;i++){
if(!vis[i]){
dfs(graph,i,vis,in_dfs,loop);
if(loop){
break;
}
}
}
return !loop;
}
};
边栏推荐
- Decoding Redis' most overlooked high CPU and memory usage issues
- Lake storehouse which electricity (2) of the project: project using technology and version and the environment
- 关于File文件的相关知识
- 监控界的最强王者,没有之一!
- 【河北工业大学】考研初试复试资料分享
- 【Kaggle:UW-Madison GI Tract Image Segmentation】肠胃分割比赛:赛后复盘+数据再理解
- MySQL查询性能优化
- MySQL中的select,from, join, on where groupby等执行顺序
- saltstack学习2grains&pillar
- 腰部外骨骼机器人线性自抗扰控制器参数优化
猜你喜欢

别被隐私计算表象骗了 | 量子位智库报告(附下载)

13-GuliMall Basics Summary

什么是私有云?您应该知道的 6 个优势

手慢无!阿里亿级流量高并发系统设计核心原理全彩笔记现实开源

云主机上的MongoDB被威胁,开启AUTH认证

What happened when the computer crashed?

Breaking the principle and introducing SQL, what does MongoDB want to do???

概率论的学习整理1: 集合和事件

概率论的学习整理3: 概率的相关概念

js 构造函数 return 非空对象,其实例化的对象在原型上的差异
随机推荐
[BJDCTF2020]Cookie is so stable-1|SSTI injection
【MySQL系列】-B+树索引和HASH索引有什么区别
grep时排除指定的文件和目录
基于柔性人机接口的人机协调运动控制方法
Mysql 批量插入事务唯一键重复处理
There is no one of the strongest kings in the surveillance world!
int a=8,a=a++,a? int b=8,b=b+1,b?
如何把Excel表格显示到邮件正文里?
Mysql索引结构
[SCTF2019]Flag Shop
Homework 7.29 correlation function directory and file attributes related functions
AlphaFold预测了几乎所有已知蛋白质!涵盖100万物种2.14亿结构,数据集开放免费用...
dolphinscheduler添加hana支持
重建丢失的数据
Decoding Redis' most overlooked high CPU and memory usage issues
Rust 从入门到精通02-安装
RTSP/Onvif协议视频平台EasyNVR服务一键升级功能的使用教程
什么是驱动程序签名,驱动程序如何获取数字签名?
无人艇轨迹跟踪的预设性能抗扰控制研究
EXCEL解决问题:如何查找目标区域,是否包含指定字符串?
