2014-01-19 128 views
1

基本上一项转让予需要创建一个C#程序,将采取一些作为输入(n)的再创建一个二维数组大小为n×n个用数字1到(N * N)。它需要使用暴力方法。我已经完成了这个工作,但目前程序只会随机生成数字的顺序,所以它有时会不止一次地检查相同的顺序。显然这意味着需要很长时间才能检查3以上的任何数字,甚至3分钟可能需要几分钟时间。基本上我想知道是否有任何方式让我只检查一次订单。我只允许使用“基本” C#的功能,所以就像*,/,+,事情 - 而不是像.Shuffle等幻方蛮力算法

+0

你可以编写自己的shuffle函数吗?这很容易做到。 – Dukeling

+0

1)向我们展示了你到目前为止所拥有的,以及2)Brute Force的含义,为什么你必须使用它? 3)如果你真的认为真正的蛮力(穷举搜索所有可能的组合),它显然有严重的指数增长这个问题,甚至三个应该是缓慢的。 – RBarryYoung

+0

根据你所做的事情,我假设这些数字必须随机分布在网格中(而不仅仅是从左上角的1​​开始)。它是否正确? – Dukeling

回答

1

选择随机顺序,因为你发现了,是不是一个好主意。

我建议你把所有的号1 ...(N * N)的阵列,并且比发现所有的排列。

当你把所有的排列,可以很容易地创建方(1 ... N ==>的第一行,N + 1 ... 2N ==>第二行等)。现在

,发现所有的排列可以与基本操作来完成递归

3

让我知道我理解这个问题:你想列举的数字1到n的平方的所有排列,并检查是否置换产生了一个神奇的正方形。您现在随机生成排列,但您希望生成所有排列。

我写了一系列的关于生成排列物品;这里很容易总结。

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