【问题标题】:Calculate number of vertices on shortest.paths igraph计算 shortest.paths igraph 上的顶点数
【发布时间】:2018-10-19 05:22:56
【问题描述】:

有一个这样的加权有向网络:

library(igraph)

g <- erdos.renyi.game(25, 1/10, directed = TRUE)
E(g)$weight <- runif(length(E(g)), 1, 5)

当运行最短路径函数sp &lt;- shortest.paths(g) 时,我显然得到了一个矩阵,其间有加权边的总和。但是,我想计算这条路径上有多少个顶点。

这个想法来自于搜索火车网络的最短路径,边作为火车站,因为我想查看每条最短路径的传输量(在顶点或节点之间)。

编辑:例如,如果最短路径是 A 到 C,我想知道中间有多少个顶点。例如,如果完整路径是 A - E - B - C,那么 E 和 B 是中间顶点,所以我的值为 2。完整的顶点路径也可以,所以在这种情况下它会给我完整最短路径的 4 个顶点。

【问题讨论】:

  • 类似命名的shortest_paths 函数将完整路径作为列表提供给您,但您必须指定开始的顶点。例如shortest_paths(g,1) 为您提供从顶点 1 到图中所有顶点的路径。可以看到有些路径不是以 1 开头的;这意味着相应的结束顶点不可到达(因此您也会收到警告)。
  • @nicola,是有道理的,但这给出了可到达的顶点,而我只想要最短的路径。最重要的是,还有一个问题是它没有给我中间顶点。我将编辑帖子以使其更清晰。
  • 尝试shortest.paths(g, weights=NA, mode="out"),您应该会得到一个具有所需结果的矩阵。无法访问的节点显示为Inf。通过将权重设置为 NA 最短路径,只需为您总结边数,并设置 mode='out' 给出从行到列的定向路径。 i 和 j 之间的节点数将为边数减 1。

标签: r igraph shortest-path transport


【解决方案1】:

找到问题的替代解决方案。

sp <- shortest_paths(g, V(g), V(g), mode = "all",
                         weights = E(g)$weight, output = "vpath")$vpath

lengths(sp)

这给出了该路径上的确切顶点数。因此,对于中间停止,只需将值减去 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多