gpt4 book ai didi

r - 如何在 R 中绘制哈密顿图?

转载 作者:行者123 更新时间:2023-12-02 01:26:05 25 4
gpt4 key购买 nike

我有以下无向图(图片),其中包含一个循环或长度为 |V|= 8 的哈密顿路径。没有重复边和顶点的循环(路径)是红线。邻接矩阵是:

<表类="s-表"><头>ABCDEFGH<正文>A01011000B10100100C01010001D10100010E10000110F01001001G00011001H00100110

如何在 R 中绘制此图?

Ham = matrix(c(0,1,0,1,1,0,0,0,
1,0,1,0,0,1,0,0,
0,1,0,1,0,0,0,1,
1,0,1,0,0,0,1,0,
1,0,0,0,0,1,1,0,
0,1,0,0,1,0,0,1,
0,0,0,1,1,0,0,1,
0,0,1,0,0,1,1,0),8,8)
Ham

enter image description here

最佳答案

更新

如果你只需要所有汉密尔顿圈中的一个,你可以尝试graph.subisomorphic.lad(感谢@Szabolcs 的建议),如果你不需要,它会加快很多列出所有的可能性,例如,

g <- graph_from_adjacency_matrix(Ham, "undirected")
es <- graph.subisomorphic.lad(make_ring(vcount(g)), g)$map
g %>%
set_edge_attr("color", value = "black") %>%
set_edge_attr("color",
get.edge.ids(g, c(rbind(es, c(es[-1], es[1])))),
value = "red"
) %>%
plot()

如果你想找到所有的汉密尔顿圆:

你应该知道汉密尔顿圆同构于一个由所有顶点组成的环,所以我们可以求助于 subgraph_isomorphisms 来找出所有这些类型的“环”,例如,

g <- graph_from_adjacency_matrix(Ham, "undirected")
lst <- lapply(
subgraph_isomorphisms(make_ring(vcount(g)), g),
function(es) {
g %>%
set_edge_attr("color", value = "black") %>%
set_edge_attr("color",
get.edge.ids(g, c(rbind(es, c(es[-1], es[1])))),
value = "red"
)
}
)

其中lst是一个图表列表,可以看到

  1. plot(lst[[1]] 给出 enter image description here
  2. plot(lst[[2]] 给出 enter image description here

等等等等。

关于r - 如何在 R 中绘制哈密顿图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74646363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com