【发布时间】: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 <- 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