我需要一个算法,在一个2D网格上随机生成一个大小为(M X N)的自回避多边形。自回避多边形的定义在here。这是网格上的闭合路径(环),它本身不交互。如果可能,该算法将更好地生成概率相等的任何可能的自回避多边形。 我可以想出迷宫生成算法,使用深度优先搜索来生成树wiki-link,然后树的圆周就是一个自我回避的多边形。但是这种方法不能生成所有可能的自回避多边形,例如网格内的最大矩形(M X N)。 ?
这是一个算法问题,所以我将使用伪码。假设我们有一个排序数组的算法--长度为n的。排序算法有一个函数buildMaxHeap,它在发生其他事情之前将数组转换为堆: A.buildMaxHeap() // turn array A into a maxheapbuildMaxHeap是自下而上的迭代函数: for i = (n-1)/2 to 0}
假设我们需要将buildMaxHeap转换为自顶向