• Kosaraju


    编辑器加载中...

    #define MAXNODE 

    typedef
    struct NODE
    {
    int num;
    struct Node *next;
    }Node;
    typedef Node
    * Graph[MAXNODE];


    //--------Build_Graph & Free_Graph-------------
    Graph G,GT;
    int nodenum,edgenum;
    void Build_Graph(Graph &G,Graph &GT)
    {
    int nodeone,nodetwo;
    Node
    *p;
    memset(G,
    0,sizeof(G));
    memset(GT,
    0,sizeof(GT));
    for(int i=1;i<=edgenum;i++)
    {
    scanf(
    "%d %d",&nodeone,&nodetwo);
    p
    =(Node*)malloc(sizeof(Node));
    p
    ->num=nodetwo;
    p
    ->next=G[nodeone];

    p
    =(Node*)malloc(sizeof(Node));
    p
    ->num=nodeone;
    p
    ->next=G[nodetwo];
    }
    }
    void Free_Graph(Graph &G,Graph &GT)
    {
    Node
    *p,*next;
    int i;
    for(i=1;i<=nodenum;i++)
    {
    p
    =G[i];
    while(p)
    {
    next
    =p->next;
    free(p);
    p
    =next;
    }
    p
    =GT[i];
    while(p)
    {
    next
    =p->next;
    free(p);
    p
    =next;
    }
    }
    }

    //-------Kosaraju---------------
    bool is_visited[MAXNODE];
    int visit_order[MAXNODE];
    int id_scc[MAXNODE];
    void Fir_DFS(int i,int &order)
    {
    is_visited[i]
    =true;
    for(Node *p=G[i];p;p=p->next)
    {
    int next=p->num;
    if(false==is_visited[next])
    Fir_DFS(next,order);
    }
    visit_order[
    ++order]=i;
    }
    void Sec_DFS(int i,int id)
    {
    is_visited[i]
    =true;
    for(Node *p=GT[i];p;p=p->next)
    {
    int next=p->num;
    if(false==is_visited[next])
    Sec_DFS(next,id);
    }
    id_scc[i]
    =id;
    }

    int Kosaraju()
    {
    int order=0;
    memset(is_visited,
    false,sizeof(is_visited));
    for(int i=1;i<=nodenum;i++)
    {
    if(false==is_visited[i])
    Fir_DFS(i,order);
    }

    int cnt_scc=0;
    memset(is_visited,
    false,sizeof(is_visited));
    for(int i=nodenum;i>0;i--)
    {
    if(false==is_visited[visit_order[i]])
    Sec_DFS(visit_order[i],
    ++cnt_scc);
    }

    return cnt_scc;
    }
  • 相关阅读:
    IOS中将十进制色值转换成UIColor
    WPF中让TextBlock每一个字符显示不同的颜色
    WPF中Application.Current的使用
    WPF中三种方法得到当前屏幕的宽和高
    WPF中的一些常用类型转换
    C#中日期时间的简单操作
    WPF中Image的Stretch属性
    WPF中的多点触摸事件
    SpringMV常用注解之@requestbody和@requestparam
    SpringMVC常用注解之@ModelAttribute
  • 原文地址:https://www.cnblogs.com/fornever/p/2177912.html
Copyright © 2020-2023  润新知