最短路径函数在Rgraph中返回错误的路径

时间:2019-08-20 21:37:42

标签: r igraph shortest-path

我使用get.shortest.paths方法来找到两个顶点之间的最短路径。但是,正在发生一些奇怪的事情。在收到我的评论后,我将更改整个问题正文。我用g <- sample_smallworld(1, 20, 5, 0.1)制作了图表,这是邻接表。

*Vertices 20
*Edges
1 2 0
2 3 0
3 4 0
4 5 0
5 6 0
6 7 0
7 8 0
8 9 0
9 10 0
10 11 0
11 12 0
12 13 0
13 14 0
14 15 0
6 15 0
16 17 0
17 18 0
18 19 0
19 20 0
1 20 0
1 11 0
1 19 0
1 4 0
1 18 0
1 5 0
1 17 0
6 17 0
15 16 0
2 20 0
2 4 0
2 19 0
2 5 0
2 18 0
2 9 0
2 17 0
2 13 0
3 5 0
3 20 0
3 6 0
3 19 0
3 7 0
3 18 0
3 8 0
4 6 0
4 7 0
4 20 0
4 8 0
5 19 0
4 9 0
5 7 0
5 8 0
5 9 0
5 20 0
5 10 0
6 8 0
6 9 0
6 10 0
6 11 0
7 9 0
7 10 0
7 11 0
7 12 0
1 10 0
8 11 0
1 12 0
8 13 0
9 11 0
9 12 0
9 13 0
7 14 0
12 19 0
10 13 0
10 14 0
10 15 0
11 13 0
11 14 0
11 15 0
4 16 0
12 14 0
9 15 0
12 16 0
12 17 0
13 15 0
13 16 0
13 17 0
13 18 0
14 16 0
14 17 0
14 18 0
14 19 0
15 17 0
15 18 0
15 19 0
1 15 0
16 18 0
16 19 0
9 20 0
17 19 0
17 20 0
10 18 0

报告的7到2之间的最短路径是:

> get.shortest.paths(g,7,2)
$vpath
$vpath[[1]]
+ 4/20 vertices, from c915453:
[1]  7 14 19  2

这是节点7和节点2的相邻节点:

> unlist(neighborhood(g, 1, 7, mode="out")) 
 [1]  7  3  4  5  6  8  9 10 11 12 14
> unlist(neighborhood(g, 1, 2, mode="out")) 
 [1]  2  1  3  4  5  9 13 17 18 19 20

如您所见,我可以从7转到3,也可以从3转到2。看来路径更短。我可能会缺少什么?

1 个答案:

答案 0 :(得分:1)

是的,问题在于您的边权重为零。查看帮助页面?shortest_paths

  

重量
  可能是给出边缘权重的数值向量。如果这是   NULL,并且图形具有权重边缘属性,则该属性为   用过的。如果此值为NA,则不使用权重(即使图形具有   重量属性)。

请注意,weights=NULL是默认设置,因此将使用权重。因此,返回的路径的权重为零-与您要获取的路径相同。 加权距离是相同的。如果要查找跳数最少的路径,请关闭像这样的权重的使用:

get.shortest.paths(g,7,2, weights=NA)$vpath