我需要一种方法来查找有向无环图的根。我使用布尔邻接matix来表示java中的图。所以请建议。图也是未加权图
答案 0 :(得分:8)
找到indegree为0的节点。为了使下面的算法工作,我们假设图中没有任何节点被隔离。
int indegree[N]={0};
for(i=0;i<n;++i){
for(j=0;j<n;++j){
if(graph[i][j]==1){ //assuming edge from i to j
indegree[j]++;
}
}
}
for(int i=0;i<n;++i){
if(indegree[i]==0) add i to roots;
}
答案 1 :(得分:2)
您正在寻找没有边缘的节点。如果邻接矩阵被编码使得条目(i,j)包含1,当且仅当存在从i到j的边缘时,那么对于节点K是根,则必须没有形式的边缘i-&gt; ; K,因此表格(i,K)的条目中没有1。所以你正在寻找全部为零的列K.每个这样的列都是根。
在伪代码中,
roots = {}
for k in 1 to N
for i in 1 to N
if adjacencies[i, k] > 0
continue with next k value
add k to roots
答案 2 :(得分:1)
可以在线性时间内完成。它基本上在图表上进行DFS,所有边缘都反转。
这将获取所有必需的顶点,其中in-degree等于零或DAG的根。