我使用all_shortest_paths
函数来识别给定两个顶点的所有最短路径。
我不知道它们之间的区别,但是以下两个函数给我相同的结果
all_shortest_paths(g, 1,3)
get.all.shortest.paths(g, 1,3)
这是结果
$res
$res[[1]]
+ 3/9 vertices, from a86e634:
[1] 1 4 3
$res[[2]]
+ 3/9 vertices, from a86e634:
[1] 1 2 3
$nrgeo
[1] 1 1 2 1 1 0 1 1 1
现在,我想获取在没有源节点和宿节点的路径中访问的节点。例如,我得到第一个最短的路径。
> all_shortest_paths(g, 1,3)$res[1]
[[1]]
+ 3/9 vertices, from a86e634:
[1] 1 4 3`
如何存储除源节点和宿节点(即1,3)之外的已访问节点?当我分配a<- all_shortest_paths(g, 1,3)$res[1]
时,它的类型看起来像列表,但是无论我做什么,我都无法访问4。它不断返回我+ 3/9 vertices, from a86e634:
[1] 1 4 3
答案 0 :(得分:2)
您需要再向下移动all_shortest_paths
返回的列表。在下面的代码中,我创建了变量n
,以使其更具可读性。
library(igraph)
g <- make_graph("Cubical")
p <- all_shortest_paths(g, 1, 3)
n <- length(p[[1]][[1]])
p[[1]][[1]][-c(1, n)]
#+ 1/8 vertex, from 0de75ff:
#[1] 4
要一次性获得所有内部顶点,请在lapply
上使用p[[1]]
。
lapply(p[[1]], function(.p){
n <- length(.p)
.p[-c(1, n)]
})
#[[1]]
#+ 1/8 vertex, from 0de75ff:
#[1] 4
#
#[[2]]
#+ 1/8 vertex, from 0de75ff:
#[1] 2
此代码不依赖于内部顶点的数量,可以看出源和宿分别为1和7。
这次是单线。
(输出省略。)
p2 <- all_shortest_paths(g, 1, 7)
lapply(p2[[1]], function(.p) .p[-c(1, length(.p))])