双DFS求强连通分量

来源:互联网 发布:ipv6网络环境搭建 编辑:程序博客网 时间:2024/06/05 19:42
用双DFS实现强连通分量是3个方法中比较好理解的。注意事项:1.读入文件时,我用的是fstream,流的方式读入!2.如果是数据集中没有别的多余符号,可以直接读入。若是由逗号等符号分隔开,我用的是CString中的readstring来按行读入,需引入头文件.在按行截取,用到find()函数,TrimLeft()和TrimRight()函数!3.按行读入数据后建立正反两个邻接表!按头插法建立效率更高些!4.建立一个Graph类和Readfile类,其中Graph类中包含图的各种信息。Readfile类中有读文件的方法,使得调用这个方法后会产生一个Graph类对象,包含数据集的所有信息,即调用这个函数后我们把数据集转换成了一个Graph对象!5.其中一个较难点是输出结点的出栈顺序,我用了一个time变量的引用来记录每个结点的出栈时间!具体代码如下:这是读文件的代码,结果是产生一个图对象!这是第一次深度优先遍历,用&time来记录每个顶点的出栈时间:这是第二次深度优先遍历,输出各个强连通分量按行隔开!这是主程序,通过调用读文件函数生成一个图对象,在这个对象上分别进行两次DFS即可!
0 0