发现在有向图中极大强连通分支的另一种求法:
算法思想:从图中任意取一个点,将所有与该点可以互通的点形成一个点集,加上该点,以及这些点之间的边就是图的一个极大强连通分支;接下来,从图中继续取点,重复同样的操作,直到点都被取完为止。
如果a与点b互通,那么以a为边的尾,可以通到b,而且以b为头;并且以a为头,并且存在通路,以b为尾;
算法步骤:
1.从图中任取一点没有被标记成集的点a;
2.将a标记成点集的一点,标记成要访问的点;
3.将所有与a有边,且以a为尾的点(未标记过的点)标记成要访问;
4.a所有的边都遍历后,将a标记成已访问,继续遍历点集中其他标记成要访问的点,直到所有的点都已访问过;
5.按上述方法标记以a为首的点;
6.在所有标记成以a为首,以及以a为尾的点中,找出所有既标记成以a为首的点,也标记成以a为尾的点,这样的点集加上点a就是一个极大强连通分支;
7.回到1,直到图中的点都被标记为止。
代码:
#include<iostream>
using namespace std;
struct node{
int start;
int end;
};
node ver[100];
int point