确定根顶点和终端顶点之间的路径?

Posted

技术标签:

【中文标题】确定根顶点和终端顶点之间的路径?【英文标题】:determining paths between root and terminal vertices? 【发布时间】:2018-05-14 21:45:47 【问题描述】:

我已经获得了一些代码(感谢各位好心人),这些代码在代表北极浮冰融化和破裂的谱系的大图 (n=266) 中找到了我的根节点和终端节点:

vattrib_df$inst[is.na(vattrib_df$motherinst == TRUE)]

roots = which(sapply(sapply(V(g),
                    function(x) neighbors(g, x, mode = 'in')), length) == 0)

terminals = which(sapply(sapply(V(g),
                    function(x) neighbors(g, x, mode = 'out')), length) == 0)

当我在控制台中输入“根”和“终端”时,我分别得到了 6 个和 11 个观察的观察名称。

我现在要做的是计算每个组合之间的节点路径。例如,我可以用这些数据制作一个矩阵吗?我对 R 很陌生,所以我仍然很难有远见地知道如何用编码术语来解决这些问题。

谢谢。

【问题讨论】:

请提供可重现的示例和所需的输出。 【参考方案1】:

这是一个例子:

library(igraph)
set.seed(1)
g <- random.graph.game(10, .15, directed = TRUE)

roots = which(sapply(sapply(V(g),
  function(x) neighbors(g, x, mode = 'in')), length) == 0)
terminals = which(sapply(sapply(V(g),
  function(x) neighbors(g, x, mode = 'out')), length) == 0)
roots
# [1] 2 4
terminals
# [1] 1 5 8
(paths <- lapply(roots, all_simple_paths, graph=g, to=terminals))
# [[1]]
# [[1]][[1]]
# + 2/10 vertices, from 1951039:
#   [1] 2 5
# 
# [[1]][[2]]
# + 4/10 vertices, from 1951039:
#   [1] 2 6 3 8
# 
# [[1]][[3]]
# + 5/10 vertices, from 1951039:
#   [1]  2  6  3 10  8
# ......

查看?all_simple_paths,也许还可以查看?all_shortest_paths

【讨论】:

以上是关于确定根顶点和终端顶点之间的路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何查找 2 个顶点之间的所有可能路径

洛谷 P2691 逃离

检查有向无环图中两个顶点之间是不是存在路径 - 查询

Prolog中定义图:边和路径,查找两个顶点之间是不是有路径

删除一些边缘后的 DFS

数据结构与算法之图