根据DAG中的顶点名称获取“顶级”边缘

时间:2019-03-11 14:31:58

标签: r igraph directed-acyclic-graphs

relations <- data.frame(from=c("Bob", "Tom", "Cecil", "Alice", "Esmeralda"),
                        to=c("Alice", "Cecil", "Esmeralda", "Esmeralda", "David"))
g <- graph_from_data_frame(relations, directed=TRUE)
plot(g)

我可以找到这样一个顶点的父代:

head_of(g, E(g)[V(g)[name=="Bob"]])

我的问题是:如何找到顶点的顶级父级?在这种情况下,遵循路径

Bob-> Alice-> Esmeralda-> David

我将顶点名称Bob用作输入,并想找到顶级父级(David)。

2 个答案:

答案 0 :(得分:3)

如果采用可以从“鲍勃”到达的点的子图(仅使用出站链接),则您寻求的顶级父级将是距“鲍勃”最远的点。

placeholer

答案 1 :(得分:0)

这可能不是最好的方法,因为您可以始终步行离开的邻居,直到没有其他人为止。例如

top_node <- function(v) {
  vx <- V(g)[v]
  vresut <- vx
  visited <- c()
  while(length(vx)>0 && !(vx %in% visited)) {
    if (length(vx)>1) stop("multiple outgoing nodes found")
    vresult <- vx
    visited <- c(visited, vx)
    vx <- V(g)[outnei(vx)]  
  }
  vresult
}

top_node("Bob")

这假设每个节点都有一个输出节点,并且没有回路/电路。