如何构建一个有向无环图中某个节点所依赖的所有节点组成的子图
有一个有向无环图,采用邻接矩阵存贮,请问如何找到某个节点依赖的所有节点组成的子图。谢谢!
比如A-> B-> C-> D,
那么所有依赖C节点组成的子图应该为A-> B-> C
如何构建一个有向无环图中依赖于某个节点的所以节点组成的子图
[解决办法]
根据邻接矩阵先查找与C相连的顶点,查找同时将此关系写入新的子图的邻接矩阵中
然后分别以与C相连的各个顶点为新的参数,递归进行上步骤,注意要根据新的邻接矩阵判断某顶点是否已经被调用过了
[解决办法]
比如,从x开始做深度优先遍历,
1)如果访问到C,那么,栈中的节点,都依赖与C
2)否则,遍历中访问到的节点,都不依赖与C
从剩下的节点中选y,继续做以上步骤,直到所有节点都被确定是否依赖于C
[解决办法]
对于逆临接矩阵结构,只要顺序扩展该节点的邻接点就可以了,
对于临接矩阵结构,比较麻烦一些
用一个二维数组存储依赖关系
a[N][N]={-1};//初始值为-1表示无依赖关系
a[i][j]=k;//表示结点i是第j个(因为可能存在多个结点直接依赖于同一个结点)直接依赖于k的结点
算法描述:
(1)初始化依赖关系表
(2)遍历图,标记依赖关系
(3)根据依赖表生成子图
如图:(求依赖于e结点的子图)
a----> b-----> d
\
\
c----> e
0 1 2 3 4
a b c d e
0 a -1 -1 -1 -1 -1
1 b 0 -1 -1 -1 -1//b直接依赖于a
2 c -1 -1 -1 -1 -1
3 d 1 -1 -1 -1 -1//d直接依赖于b
4 e 1 2 -1 -1 -1//e直接依赖于b,c
现在从e点出发构建子图
e-> table[1][0]-> table[0][0]-> -1
e-> table[2][0]-> -1