强连通图tarjan算法C语言实现

/******************************************

图的定义:

1->2->4->6->8->7->6 

      2->3->1 

            4->5->2 

运行结果:

连通分量1: 7 8 6
连通分量2: 5 4 3 2 1
2 2 2 2 2 1 1 1
Press any key to continue

******************************************/

#include   
#include   
using namespace std;   
  
const int MAX=10001;   
  
int Stop;//栈中的元素个数   
int cnt;//记录连通分量的个数   
int visitNum;//记录遍历的步数   
int DFN[MAX]; //记录节点u第一次被访问时的步数   
int LOW[MAX]; //记录与节点u和u的子树节点中最早的步数   
bool instack[MAX];//记录节点u是否在栈中   
int Stap[MAX];//栈   
int Belong[MAX];//记录每个节点属于的强连通分量编号   
  
int N;//节点个数   
  
vector tree[MAX];   
  
void tarjan(int i)   
{   
    int j;   
    DFN[i]=LOW[i]=++visitNum;   
    instack[i]=true;   
    Stap[++Stop]=i;//将当前节点压入栈中   
    for (unsigned k=0;k


你可能感兴趣的:(算法设计)