zoukankan      html  css  js  c++  java
  • dataStructure@ Check if a directed graph has cycles

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<limits>
     5 #include<vector>
     6 using namespace std;
     7 const int maxn = 10;
     8 struct edge{
     9     int to, cost;
    10     edge(int t){
    11         this->to = t; this->cost = 0;
    12     }
    13 };
    14 void addEdge(vector<edge> &edgelist, vector<vector<int> > &G, int from, int to){
    15     edgelist.push_back(edge(to));
    16     G[from].push_back(edgelist.size()-1);
    17 }
    18 void addDoubleEdge(vector<edge> &edgelist, vector<vector<int> > &G, int from, int to){
    19     addEdge(edgelist,G,from,to);
    20     addEdge(edgelist,G,to,from);
    21 }
    22 bool isCyclic(vector<edge> edgelist, vector<vector<int> > G,vector<bool> vis, vector<bool> RecStack, int v){
    23     for(int i=0;i<G[v].size();++i){
    24         edge e = edgelist[G[v][i]];
    25         if(RecStack[e.to]) return true;
    26         if(!vis[e.to]){
    27             vis[e.to] = true; RecStack[e.to] = true;
    28             if(isCyclic(edgelist,G,vis,RecStack,e.to)) return true;
    29             RecStack[e.to] = false;
    30         }
    31     }
    32     return false;
    33 }
    34 void buildMap(vector<edge> &edgelist, vector<vector<int> > &G){
    35     addEdge(edgelist,G,0,1);
    36     addEdge(edgelist,G,0,2);
    37     addEdge(edgelist,G,2,0);
    38     addEdge(edgelist,G,1,2);
    39     addEdge(edgelist,G,2,3);
    40     addEdge(edgelist,G,3,3);
    41 }
    42 int main(){
    43     vector<edge> edgelist;
    44     vector<vector<int> > G(maxn);
    45     vector<bool> vis(maxn);
    46     vector<bool> RecStack(maxn);
    47     
    48     buildMap(edgelist,G);
    49     
    50     for(int i=0;i<vis.size();++i) vis[i]=false;
    51     for(int i=0;i<RecStack.size();++i) RecStack[i]=false;
    52     
    53     for(int i=0;i<G.size();++i){
    54         if(!vis[i]){
    55             vis[i] = true; RecStack[i] = true;
    56             if(isCyclic(edgelist,G,vis,RecStack,i)){
    57                 cout<<i<<" starts a cycle"<<endl; 
    58             }
    59             RecStack[i] = false;
    60         }
    61     }
    62     
    63     return 0;
    64 }
  • 相关阅读:
    常用的正则表达式
    vue多页面应用
    webpack + jquery + bootstrap 环境配置
    Goroutine的几个例子
    设置css通用字体
    简单的gulpfile.js参数配置
    1:时间戳转换成年月日函数,2:url截取参数方法,3:弹窗自定义方法 4:点击按钮加入购物车
    github上比较全的知识
    秒杀倒计时
    正则校验手机号码并获取手机验证码倒计时的实例
  • 原文地址:https://www.cnblogs.com/fu11211129/p/4903833.html
Copyright © 2011-2022 走看看