魔方蛮力算法

时间:2014-01-19 17:15:44

标签: c# algorithm magic-square

基本上,对于赋值,我需要创建一个C#程序,它将数字作为输入(n),然后创建一个数字为1到(n * n)的2D数组大小n * n。它需要使用强力方法。我已经这样做了,但目前程序只会随机生成数字的顺序,因此它有时会多次检查相同的顺序。显然,这意味着需要很长时间来检查3以上的任何数字,即使是3,也可能需要几分钟。基本上我想知道是否有任何方法让我只检查每个订单一次。我只允许使用“基本”C#函数,所以只需要像*,/,+, - 这样的东西,就像.Shuffle等。

2 个答案:

答案 0 :(得分:3)

让我确定我理解这个问题:你想要列举1到n平方数的所有排列,并检查排列是否产生魔方。您现在正在随机生成排列,但您希望生成所有排列。

我写了一系列关于产生排列的文章;它太长了,不容易在这里总结。

http://ericlippert.com/2013/04/15/producing-permutations-part-one/

答案 1 :(得分:1)

如您所见,选择随机顺序并不是一个好主意。

我建议您将所有数字1 ...(n * n)放在数组中,然后找到所有排列。

当你拥有所有排列时,很容易创建方形(1 .. n ==>第一行,n + 1 ... 2n ==>第二行,依此类推)。

现在,可以使用递归的基本操作

来查找所有排列