2014-01-19 85 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/