【发布时间】:2022-01-26 12:49:35
【问题描述】:
我想从一个包含 5 个元素的数组开始生成一个随机字典。该字典将代表一个平面图。 如何生成一个随机字典,它是一个平面图,其值和键是数组的 5 个元素? 这是我尝试过的:
q = [0, 1, 2, 3, 4]
d = {i: sample([j for j in q if i != j], randrange(1, len(q) - 1))
for i in q}
这是它生成的图表示例:
{0: [1], 1: [4, 3], 2: [4], 3: [4], 4: [0, 2]}
如您所见,问题在于 它没有创建适当的邻接矩阵(3 与 1 相连,但 1 不在其邻接矩阵中)
你们中的一些人向我提出了一个已经提出的问题,但是该问题的答案非常复杂,因为它会生成一个非常大的平面图,我在这里尝试做的是一个简单的代码,它生成一个具有 5 个顶点的小平面图.请记住,图形的平面性始终可以通过networkx 中的checkplanarity 进行检查,更多的是here,我需要解决的问题是矩阵的邻接性。
我这样做的原因是然后使用名为coloring 的以下函数为生成的图形着色四种颜色,而矩阵问题使我无法正确着色,以使相同的颜色永远不会接触。要为函数coloring 提供创建的图表,我执行以下操作:
def coloring(adj, V):
result = [-1] * V
result[0] = 0
available = [False] * V
# add values to adj matrices
for y in range(0, V):
for x in adj[y]:
if y not in adj[x]:
adj[x].append(y)
for u in range(1, V):
for i in adj[u]:
if (result[i] != -1):
available[result[i]] = True
cr = 0
while cr < V:
if (available[cr] == False):
break
cr += 1
result[u] = cr
for i in adj[u]:
if (result[i] != -1):
available[result[i]] = False
for u in range(V):
print("Vertex", u, " ---> Color", result[u])
要使用创建的图形 d 为函数 coloring 提供数据,我执行以下操作:
coloring([node for node in d.values()], 5)
【问题讨论】:
-
and that has as values the elements of the array?...这是什么意思? -
如果您在高层次上解释平面图是什么(由值列表表示)可能会有所帮助
-
@chitown88 平面图是可以绘制到 2 平面上且没有任何线相互交叉的图。例如,您绘制一个矩形,角点是图中的节点,这将是一个平面图
-
这能回答你的问题吗? Generate a large random planar graph
标签: python arrays dictionary random graph