這樣的問題在我的大學給了我,也許有人會有一個有趣的算法如何解決這個問題。在stackoverflow上有幾種解決方案,但沒有一個是可以的(因爲他們正在循環所有可能性)。幫助填字遊戲算法
問題:查找所有可能的組合給給定的表格,網格(矩形,見下面的輸入)給定的單詞。應該沒有空閒單元,單詞可以從左到右或從上到下。單詞不能位於連續(列)字中。
輸入:矩形區域,例如:
+-----+
| * |
| |
+-----+
或
+-----+
| * |
| |
| *|
| * |
+-----+
不同字被輸入隨後後(下一個輸入數據)來填充該網格如:
cdi
zobxzst
tdxic
r
sc
zro
and etc ...
數字最初是未知的,但輸入直到標準輸入 - 活動EOF結束。
輸出:如果存在一個解決方案,則在填充的網格內輸出該可能的解決方案。 如果沒有解決方案或解決方案的數量,則輸出0或確切的數字。
實施例:
(表輸入)
+-----+
| * |
| |
| *|
| * |
| * *|
| * |
| |
+-----+
然後詞語cdi zobxzst tdxic r sc zro rgfvacd oikf df x c r xvf ogish za sh fc hh h bfkh
(每個作爲輸入,但在這裏,由空格分開的)(僅1種溶液)
輸出:
+-----+
|zro*h|
|ogish|
|bfkh*|
|xvf*r|
|za*c*|
|sc*df|
|tdxic|
+-----+
重要提示:輸入的網格僅受16(!)個單元限制,單詞數量少於60個。我編寫了一個算法,搜索所有可能的組合,但由於執行時間有限,到10秒我猜),這個問題不能用粗略的算法解決(例如, 15格15格,約60!可能或更多可能的排列,可以處理大約1天?在普通的2GHz PC上)。
也許還有另一種獨特的解決方案。也許這個問題在編程時更具數學意義,也許可以使用一些左上角的組合,而不是上下?或者也許加權單元格?
P.S.我有3周的時間來解決這個問題,如果沒有,我可以在3周後發佈解決方案(好消息);)
你正在使用的這些「單詞」,「cdi」,「zobxzst」,「tdxic」,我不認爲它們表示你認爲它們的意思。 :) –
'*'做什麼? – luiges90
@JamesKolpack不可思議! –