我想串起一些天井灯。基于another question我问,我意识到我需要一个算法来解决Route Inspection Problem找出最有效的路线,灯应该采取,所以有最小的重复边缘灯。经过一番搜索,我意识到也许这样的事情是我最好的选择:Solving Chinese Postman algorithm with eulerization。如何规划天井灯的最有效路线
但是,我在创建图形时遇到了麻烦。
下面是它需要看起来像:
- 粉红色圆圈代表我可以从
- 挂灯结构的地方“开始”是唯一可用的电源插座
- 黄色点代表灯应覆盖的所有位置
这里就是我的图表看起来像引用这篇文章后:Visualizing distance between nodes according to weights - with R:
正如你可以看到,所有的节点都在正确的位置,但是边缘连接,他们不应连接。这里是我的代码:
library(igraph)
gg<-graph.ring(20)
ll=matrix(
c(0,0, 75.25,0, 150.5,0, 225.8125,0, 302.8125,0,
0,-87, 302.8125,-87,
0,-173.8125, 302.8125,-173.8125,
0,-260.9375, 302.8125,-260.9375,
16,-384.3125, 302.8125,-384.3125,
16,-435.9575, 302.8125,-435.9375,
16,-525.1875, 75.25,-525.1875, 150.5,-525.1875, 225.8125,-525.1875, 302.8175,-525.1875),
ncol=2,byrow=TRUE)
plot(gg,layout=ll)
我觉得这事做的graph.ring
性质,但我无法找出另一种方式来定义图表边缘的长度没有错误。
是的,这正是它!谢谢!然而,我怎样才能把它变成一个图形对象,它可以用于这个:'eulerian.g1 < - make.eulerian(g1)$ graph',其中'g1'是图形? (从这篇文章中解决邮差问题:https://stackoverflow.com/a/40596816/1152809) –
有趣的是,我并不知道这一点。所以,你想让eulerian成为一个不是eulerian本身的循环。我会研究一下。自定义f(x)不在我手中的盒子里工作..但我明天早上会看看这个! :-) –
是的,我不确定它为什么不能开箱即用,但如果你检查这个问题:https://stackoverflow.com/a/40596816/1152809,接受的答案给出了一个“make .eulerian'替换你可以使用。我基本上复制/粘贴它,然后做到这一点:'eulerian <-make。欧拉(GG);克<-eulerian $曲线图。帕(mfrow = C(1,2));情节(GG);图(G)'。但是,我不确定这是否是我需要的,因为它似乎没有考虑到结构(所有边缘长度)。 –