【发布时间】:2019-08-20 21:37:42
【问题描述】:
我使用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。看起来有一条更短的路径。我可能会错过什么?
【问题讨论】:
-
不幸的是,您的示例不可重现。
sample_smallworld有一个随机组件,并且您在运行它之前没有设置 random.seed,因此我们无法获得与您完全相同的图表。 你也不能。您在无向图上使用mode="out"计算邻居也有点奇怪。 -
@G5W 好的,我现在分享由
sample_smallworld生成的邻接列表。我仍然有同样的问题。 -
在@G5W 已经提到的限制下:您可以尝试将边缘权重设置为 1 而不是 0,看看会发生什么。我的猜测是,边缘权重为零会干扰计算,并可能导致随机性。 (虽然,我可能完全错了)
-
@BenNutzer 这是我最初的想法。在这篇文章 (stackoverflow.com/questions/57577735/…) 的评论部分,我询问了如何摆脱权重,但
E(g)$weight <- NULL和g <- delete_edge_attr(g, “weight”)都不起作用。我收到不同的错误。 -
delete_edge_attr为我工作。使用以下引号之一:"weight"或'weight',而不是“weight”。也可以用1覆盖它(奇怪的是不能用NA)。
标签: r igraph shortest-path