如何解决Igraph中的最短路径路径+长度
我有一个(可能是愚蠢的)最短路径问题。获得路径(vpath 对我来说是完美的)和最短路径的总权重的最佳方法是什么。我看到函数 shortest_paths
(返回路径)和 distances
(返回总重量),但这意味着计算两次。注意,我的图表中有权重。有没有快速计算路径总权重的函数?
> print(g)
IGRAPH 6c62431 DNW- 14 28 --
+ attr: name (v/c),weight (e/n)
+ edges from 6c62431 (vertex names):
[1] src ->i1-j1 src ->i1-j2 src ->i1-j3 src ->i1-j4 i1-j1->i2-j2
[6] i1-j1->i2-j3 i1-j1->i2-j4 i1-j1->i2-j5 i1-j2->i2-j3 i1-j2->i2-j4
[11] i1-j2->i2-j5 i1-j3->i2-j4 i1-j3->i2-j5 i1-j4->i2-j5 i2-j2->i3-j3
[16] i2-j2->i3-j4 i2-j2->i3-j5 i2-j2->i3-j6 i2-j3->i3-j4 i2-j3->i3-j5
[21] i2-j3->i3-j6 i2-j4->i3-j5 i2-j4->i3-j6 i2-j5->i3-j6 i3-j3->snk
[26] i3-j4->snk i3-j5->snk i3-j6->snk
> shortest_paths(g,from="src",to=c("snk"),output="both")
$vpath
$vpath[[1]]
+ 5/14 vertices,named,from 6c62431:
[1] src i1-j1 i2-j4 i3-j5 snk
$epath
$epath[[1]]
+ 4/28 edges from 6c62431 (vertex names):
[1] src ->i1-j1 i1-j1->i2-j4 i2-j4->i3-j5 i3-j5->snk
$predecessors
NULL
$inbound_edges
NULL
> distances(g,v=c("src"),to=c("snk"))
snk
src 16
解决方法
这似乎有效:
> sp <- shortest_paths(g,from="src",to="snk",output="both")
> sp["vpath"][[1]][[1]]
+ 12/112 vertices,named,from 1e5c3a5:
[1] src i1-j2 i2-j5 i3-j7 i4-j8 i5-j11 i6-j12 i7-j13 i8-j14
[10] i9-j15 i10-j17 snk
> sum(E(g)$weight[sp["epath"][[1]][[1]]])
[1] 8860.797
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。