2012/03/01

算法:深度优先遍历的应用

无向图找桥

在无向图中使用上面的算法还有一个问题,上面把指向父节点的边看成是back edge,而这个back edge和父节点指向子节点的边又不构成无向图的cycle,其实完全是矩阵表示造成的重复计数。

因为不需要考虑forwar/cross edge改用White-Gray-Black染色的算法,touch顺序上只记开始访问时候的时间,这个值称为DFS tree number,从0开始计算。

假设无向图是连通的,任选一个节点就可以遍历整个图。

初始的时候所有节点都是white,遍历的时候从一个假想的-1节点开始,-1节点为gray,节点第一次被touch到的时候变为gray,当一个节点的所有邻居都被touch过后(wgbdfs返回的时候)这个节点变为black。

DFS Tree这样定义,DFS Tree包含所有gray节点指向white的边。



这样程序得到的back edge都有一个无向图的cycle对应。

No comments:

Post a Comment

Print This Post