python中地图着色的随机实例

python中地图着色的随机实例,python,graph-coloring,Python,Graph Coloring,我需要在python中生成地图着色问题的随机实例,以实现最小冲突求解器。我应该遵循这个策略:在单位正方形上分散n个点;随机选择一个点X,通过一条线段将X连接到最近的点Y,这样X就不会连接到Y,并且该线段不会与其他线段相交(例如,请参见此处如何测试线段相交);重复上一步,直到无法再进行连接。点表示地图上的区域,线连接相邻区域。 我甚至不知道如何开始。如果你想开始,请参加本课程: class Node: def __init__(self, x, y): self.x = x s

我需要在python中生成地图着色问题的随机实例,以实现最小冲突求解器。我应该遵循这个策略:在单位正方形上分散n个点;随机选择一个点X,通过一条线段将X连接到最近的点Y,这样X就不会连接到Y,并且该线段不会与其他线段相交(例如,请参见此处如何测试线段相交);重复上一步,直到无法再进行连接。点表示地图上的区域,线连接相邻区域。
我甚至不知道如何开始。

如果你想开始,请参加本课程:

class Node:
  def __init__(self, x, y):
    self.x = x
    self.y = y
    self.neighbours = set()

  def is_neighbour(node: Node):
    return node in self.neighbours

  def connect(node: Node):
    self.neighbours.add(node)
    node.neighbours.add(self)

  def distance(node: Node):
    return ((self.x - node.x)**2 + (self.y - node.y)**2)**0.5

最困难的部分将是检测您试图建立的点之间的连接是否与另一个连接不交叉,但我将把它留给您。

从一段代码开始,该代码将选择正方形上的
n
点,如果您至少了解Python的基本知识,这应该不难。接下来,编写三个函数:线段交点检查器、距离计算器、给定X的函数返回最接近X且未连接到X的Y,并且可以根据规则连接。如果你对这些函数中的任何一个有问题,可以问另一个问题,提供更多的细节并展示你的尝试。我正在努力解决的问题是如何表示正方形。二维列表是否太幼稚了?这取决于“正方形单位”有多大,以及您将从中选择多少点。我个人会完全跳过“字段”的表示,只将图形节点保留为带有坐标的对象。然后使用一本字典快速访问它们或其他一些方便的收藏。