我有一个(可能是愚蠢的)最短路径问题。获得路径(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
答案 0 :(得分:0)
这似乎有效:
> 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