r - 如何使用 R igraph 访问给定最短路径中的已访问顶点
问题描述
我使用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
解决方案
您需要在返回的列表中再往下一层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
on 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))])
推荐阅读
- android - Android Webview 花时间为大型表单数据输入文本
- html - 预提交不会触发?
- sql - 如何总结游标值并将该值存储在同一过程中的另一个选择语句中?
- sql - SSIS 包每月归档数据
- django - Django时区和dateTime格式显示
- xamarin - 如何从 prism xamarin 表单中的堆栈中删除页面
- wso2is - WSO2 IS - 是否有任何休息或肥皂端点,我们可以更新用户的挑战问题
- html - 图像没有响应。我已经尝试在 css 中添加 img-responsive 类和将高度设置为 auto
- php - 在第 195 行的 C:\xampp\htdocs\mgt\Master_Panel\system\core\Common.php 中找不到类“CI_GridView”
- plsql - 如何实现 PLSQL 过程重载包