dataStructure@ Check if a directed graph has cycles
2024-10-15 10:50:56
#include<iostream>
#include<cstdio>
#include<cstring>
#include<limits>
#include<vector>
using namespace std;
const int maxn = ;
struct edge{
int to, cost;
edge(int t){
this->to = t; this->cost = ;
}
};
void addEdge(vector<edge> &edgelist, vector<vector<int> > &G, int from, int to){
edgelist.push_back(edge(to));
G[from].push_back(edgelist.size()-);
}
void addDoubleEdge(vector<edge> &edgelist, vector<vector<int> > &G, int from, int to){
addEdge(edgelist,G,from,to);
addEdge(edgelist,G,to,from);
}
bool isCyclic(vector<edge> edgelist, vector<vector<int> > G,vector<bool> vis, vector<bool> RecStack, int v){
for(int i=;i<G[v].size();++i){
edge e = edgelist[G[v][i]];
if(RecStack[e.to]) return true;
if(!vis[e.to]){
vis[e.to] = true; RecStack[e.to] = true;
if(isCyclic(edgelist,G,vis,RecStack,e.to)) return true;
RecStack[e.to] = false;
}
}
return false;
}
void buildMap(vector<edge> &edgelist, vector<vector<int> > &G){
addEdge(edgelist,G,,);
addEdge(edgelist,G,,);
addEdge(edgelist,G,,);
addEdge(edgelist,G,,);
addEdge(edgelist,G,,);
addEdge(edgelist,G,,);
}
int main(){
vector<edge> edgelist;
vector<vector<int> > G(maxn);
vector<bool> vis(maxn);
vector<bool> RecStack(maxn); buildMap(edgelist,G); for(int i=;i<vis.size();++i) vis[i]=false;
for(int i=;i<RecStack.size();++i) RecStack[i]=false; for(int i=;i<G.size();++i){
if(!vis[i]){
vis[i] = true; RecStack[i] = true;
if(isCyclic(edgelist,G,vis,RecStack,i)){
cout<<i<<" starts a cycle"<<endl;
}
RecStack[i] = false;
}
} return ;
}
最新文章
- CentOS下配置nginx conf/koi-win为同一文件的各类错误
- Jquery实现静态切换tab
- YYYY-mm-dd HH:MM:SS
- ThinkPHP的RBAC
- IOS基础之 (设计模式)
- [置顶] TortoiseGit和msysGit安装及使用笔记(windows下使用上传数据到GitHub)
- 漫谈C#之关键字
- UNIX基础知识之信号
- sed找到重复的行
- 转之农民伯伯 IHttpHandler中使用Session实现原理[ASP.NET | IHttpHandler |IRequiresSessionState]
- MVC+Jqgrid
- mybatis 的一点问题
- 有没有必要参加IT培训
- centos下 redmind2.6安装
- 谈谈surging引擎的tcp、http、ws协议和如何容器化部署
- tarjin求割点
- Two Sum【LeetCode】
- Linux中通过Socket文件描述符寻找连接状态介绍
- ElasticSearch6(二)-- Java API连接es
- linux --- 3 vim 网络 用户 权限 软连接 压缩 定时任务 yum源