2012-09-21 20 views
0

對不起,如果我在這裏發佈此錯誤。但我有點不知道我應該發佈這個Stackoverflow頻道,並認爲這是最好的。用於解決難題的編程設計

我正在解決KenKen拼圖。它與sudoku非常相似,並且有一些總數和操作符的籠子,我們必須使用唯一的數字來解決填充框。

爲了解決這個難題,我會得到一個輸入信息,我可以得到每個籠子的值,例如籠子的總價值,操作員使用的廣告框。

按我解決使用回溯這個問題的方法:

  1. 我解析輸入來創建每個籠子一類的數據結構。
  2. 後來我爲每個籠子創建一個類對象的數組。

  3. 此後我會應用我的算法使用回溯來解決這個難題。

開始之前,我編碼我只是想在這裏與家人商量,如果他們覺得編程的方法是正確的或我還需要做出更改方法,或者如果他們想提出我的東西解決。

+1

我會建議使用設置解算器。考慮看看約束編程。我已經使用一套解算器實現瞭解決n皇后問題的解決方案,與傳統的天真求解器或強力解算器相比,求解時間更短。檢查這[谷歌代碼上的8Queens](http://8queens.googlecode.com/) – user1406062

+0

@ HussainAl-Mutawa是的,我將使用CSP ..它似乎是一個更好的方式..但奇怪的是我無法找到任何代碼/算法幫助我。 – CodeMonkey

+1

你可以使用[cream](http://bach.istc.kobe-u.ac。jp/cream /)它是一個java庫,也是我用來解決n皇后問題的庫。你不需要知道約束解決如何工作的每個細節,只需要知道如何有效地使用可用的庫。還有其他的庫,其中大部分都是開源的。 – user1406062

回答

1

我認爲回溯可能是解決這個問題的最好方法之一。 老實說,我現在找不到更好的東西。

我不知道你計劃在你的算法中究竟做了些什麼。但我建議你不應該只依靠回溯本身。我只閱讀維基百科上的文章,以瞭解KenKen是什麼。但它似乎有可能從頭開始改善回溯:

對於回溯,您通常使用堆棧。所以你可能有一堆物品,告訴你放哪個號碼放在哪個籠子裏。 現在你可以給每個堆棧對象一個屬性,告訴你的算法是否從一堆可能性中選擇了這個數字,或者如果你的算法被迫在這個地方選擇了這個數字,因爲它沒有別的選擇。 所以不是這樣的堆棧:

(2,2) 5 
(1,1) 4 
(0,0) 1 

你的籌碼應該是這樣的:

(2,2) 5 CHOSEN 
(1,1) 4 IMPLIED 
(0,0) 1 CHOSEN 

然後你只有回溯到最後的「暗示」,因爲你不能選擇一些其他的價值這裏。另外,如果所有其他選擇都被證明是錯誤的,那麼就會隱含一些東西。 我不知道KenKen可能有多遠。您應該確保,在開始時的選擇不能強制您的算法稍後使用IMPLIED,但實際上在這個位置數字沒有被隱含。