Igraph中的最短路径(路径+长度)

时间:2021-01-28 13:17:12

标签: r 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 

1 个答案:

答案 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
相关问题