一个网格使用存储在两个数组中的边来定义图像:
h[x][y]
给出从x,y
到x+1,y
的边权重v[x][y]
给出从x,y
到x,y+1
的边权重
我正在尝试实现Kruskal算法。这相当简单 - 我可以找到在线实现并复制它们。问题在于处理边缘。具体来说;对它们进行排序很困惑。
是否有更好的方法来专门存储此类边缘?我希望它们是从每个像素到相邻像素。我将图像存储为i[x][y],而边权重仅是图像值之间的差异。
一个网格使用存储在两个数组中的边来定义图像:
h[x][y]
给出从 x,y
到 x+1,y
的边权重v[x][y]
给出从 x,y
到 x,y+1
的边权重我正在尝试实现Kruskal算法。这相当简单 - 我可以找到在线实现并复制它们。问题在于处理边缘。具体来说;对它们进行排序很困惑。
是否有更好的方法来专门存储此类边缘?我希望它们是从每个像素到相邻像素。我将图像存储为i[x][y],而边权重仅是图像值之间的差异。
你需要做的是创建一个边缘列表并将其排序。为此,您需要定义一个Edge类:
class Edge:
def x
def y
def direction
def weight
h
和v
矩阵,并构建edges
列表。最终,它应该有2 * N * M
个元素。边的方向应该是'h'
或'v'
,具体取决于您解析的矩阵。h
和v
矩阵用于其他任何目的,则可以完全放弃它们,因为您可以直接从i
矩阵计算出边的权重。edges.sort(key=weight)