Tarjan 妯℃澘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tarjan 妯℃澘相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/code' title='code'>code   16px   targe   get   lan   stack   min   target   ret   

鎰熻阿 閿洏閲岀殑闈掓槬 鍓嶈緢璇︾粏璁茶В

鍏堝紑鍧?/span>

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 const int MAXN=1000+5;
 7 struct Edge
 8 {
 9     int to,next;
10 }E[MAXN];
11 int node,head[MAXN];
12 int DFN[MAXN],LOW[MAXN],stack[MAXN];
13 int vis[MAXN],index,tot;
14 
15 void insert(int u,int v)
16 {
17     E[++node]=(Edge){v,head[u]};head[u]=node;
18 }
19 
20 void tarjan(int x)
21 {
22     DFN[x]=LOW[x]=++index;
23     stack[++tot]=x;
24     vis[x]=1;
25     for(int i=head[x];i;i=E[i].next)
26     {
27         if(!DFN[E[i].to])
28         {
29             tarjan(E[i].to);
30             LOW[x]=min(LOW[x],LOW[E[i].to]);
31         }
32         else if(vis[E[i].to])
33             LOW[x]=min(LOW[x],DFN[E[i].to]);
34     }
35     if(LOW[x]==DFN[x])
36     {
37         do
38         {
39             printf("%d ",stack[tot]);
40             vis[stack[tot]]=0;
41             tot--;
42         }while(x!=stack[tot+1]);
43         printf("
");
44     }
45 }
46 
47 int main()
48 {
49     int n,m;
50     scanf("%d %d",&n,&m);
51     for(int i=1;i<=m;i++)
52     {
53         int x,y;
54         scanf("%d %d",&x,&y);
55         insert(x,y);
56     }
57     for(int i=1;i<=n;i++)
58         if(!DFN[i]) tarjan(i);
59     return 0;
60 }

 

以上是关于Tarjan 妯℃澘的主要内容,如果未能解决你的问题,请参考以下文章

鎷撳睍KMP绠楁硶 鍏ラ棬+妯℃澘

鍖楀ぇ绠楁硶澶х鐨凩eetCode鍒烽妯℃澘.pdf鏉ヤ簡锛?/h1>

Python jinja2

18. VUE created 鏂规硶浣滅敤

Vue涓殑 el 鍜?mount 鎸傝浇

CentOS鍙抽敭鑿滃崟娣诲姞鏂板鏂囦欢鍛戒护