zoukankan      html  css  js  c++  java
  • SCC重新建图

    Tarjan或Kosaraju算法【对每个点归类belong】求出SCC之后,对num_scc个SCC重新建图,针对不同问题,考虑重边的问题。

     1 //**************************************重构图****************************************//
     2 void init_rebuild(void)
     3 {
     4     rebuild_ALG->n=num_scc;
     5     for(int i=1;i<=num_scc;i++)
     6     {
     7         rebuild_ALG->vlist[i].vertex=i;
     8         rebuild_ALG->vlist[i].firstedge=NULL;
     9 
    10         in_d[i]=0;
    11         out_d[i]=0;
    12     }
    13 }
    14 
    15 void add_edge_To_ALG(int par,int son)
    16 {
    17     ENode *ptr=(ENode *)malloc(sizeof(ENode));
    18 
    19     ptr->key=son;
    20     ptr->next=rebuild_ALG->vlist[par].firstedge;
    21     rebuild_ALG->vlist[par].firstedge=ptr;
    22 }
    23 
    24 void rebuild_ALGraph(void)
    25 {
    26     int par,son;
    27     int in_par_scc;  //判断是否已在par的scc中
    28     ENode *ptr=(ENode *)malloc(sizeof(ENode));
    29     ENode *ep=(ENode *)malloc(sizeof(ENode));
    30 
    31     for(int i=0;i<ALG->n;i++)
    32     {
    33         par=i;
    34         in_par_scc=0;
    35         ptr=ALG->vlist[par].firstedge;
    36         while(ptr!=NULL)
    37         {
    38             son=ptr->key;
    39             if(belong[par] != belong[son])
    40             {
    41                 ep=rebuild_ALG->vlist[belong[par]].firstedge;//考虑重边问题
    42                 while(ep!=NULL)
    43                 {
    44                     if(ep->key == belong[son])
    45                     {
    46                         in_par_scc=1;
    47                         break;
    48                     }
    49                     ep=ep->next;
    50                 }
    51                 if(!in_par_scc)
    52                 {
    53                     add_edge_To_ALG(belong[par],belong[son]);
    54                     in_d[belong[son]]++;
    55                     out_d[belong[par]]++;
    56                 }
    57             }
    58             ptr=ptr->next;
    59         }
    60     }
    61 }
    62 //***************************************************************************//
    ---  纵使山重水复,亦会柳暗花明   sunqh1991@163.com   欢迎关注,互相交流
  • 相关阅读:
    基于http实现网络yum源搭建
    基于长轮询简易版聊天室
    放大镜案例
    弹出登录框
    拖拽案例
    js入门之DOM动态创建数据
    heoi2020游记
    省选模拟6&7
    省选模拟5
    后缀自动机总结
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/5929923.html
Copyright © 2011-2022 走看看