我在写一个递归排列函数来解幻方时遇到了一点麻烦。对于这个函数,我不允许使用二维数组,只允许使用列表。以下是我目前的情况:
def permute(size):
magicSquare = []
for value in permute(size**2):
for pos in range(size**2 + 1):
magicSquare.append(value)
return magicSquare
size
由用户通过命令行参数定义。在
我有点困惑,上面写的函数是否完成了置换值的任务。在
Tags:
它看起来不会,事实上应该永远不会终止它当前的编写方式。在
开始考虑这个问题的一个简单方法是,幻方可以用大小为
n**2
的列表来表示,因此3x3幻方可以用一个9长度的列表来表示。因为它是一个幻方,所以需要对值range(1,n+1)
进行置换,例如,对于3x3:检查一下这是不是一个魔方(不是从rows don't sum to the same value开始的),如果是,就把它添加到幻方列表中。不管怎样,尝试下一个排列:
^{pr2}$…直到你不再排列。当然,这是一个非最优路径,因为问题行(1,2,3)的总和仍然不会为15,因此有明确的优化空间,并很容易丢弃那些不起作用的可能性。在
一个简单的工具可以检查你的工作或者为你做一个排列块是^{} 。这将创建一个generator,它将产生每一个额外的排列,直到没有更多的排列为止。在
请注意,如果每次尝试使用此方法进行另一次递归调用,则对于任何超出普通正方形大小的内容,都将超过最大递归限制。您需要找到一种方法来管理这种情况
size=3
。有几种方法可以处理复杂程度不同的问题,具体取决于你到底想做什么。在这里有一个检查幻方与否的简单方法。在
注:请尝试使用3*3网格。在
相关问题 更多 >
编程相关推荐