我看着類似的問題前面的問題的列表,但我有與此相關的算法一個具體的問題。問題陳述(https://www.hackerrank.com/challenges/crossword-puzzle/problem)如下:算法:解決字謎給出的單詞
提供了一個10x10 Crossword網格,以及需要填充到網格中的一組單詞(或地名)。 網格中的單元格最初是+符號或 - 符號。 標有+的單元必須保持原樣。標有「 - 」的單元格需要填入適當的字符。
樣品輸入:
+-++++++++
+-++++++++
+-++++++++
+-----++++
+-+++-++++
+-+++-++++
+++++-++++
++------++
+++++-++++
+++++-++++
LONDON;DELHI;ICELAND;ANKARA
通訊輸出:
+L++++++++
+O++++++++
+N++++++++
+DELHI++++
+O+++C++++
+N+++E++++
+++++L++++
++ANKARA++
+++++N++++
+++++D++++
我做寫出的算法沒有完全理解這個問題,在這裏我只是把下一個字符一個空的錯誤現場解決迷宮的方式(這裏是我的代碼):
def populate_grid(maze, locations)
maze.each_index do |row|
maze[row].each_index do |col|
if maze[row][col] == "-"
maze[row][col] = locations.first[0]
if locations.first.length == 1
locations.shift # remove this location altogether
else
locations[0] = locations[0][1...locations.first.length]
end
populate_grid(maze, locations)
end
end
end
end
Un幸運的是,這個問題沒有提供解決方案,我想知道如何爲每個單詞建立一致的方向性(例如只沿水平/垂直方向)。我想過使用一個3參數作爲布爾值來判斷這個單詞是上升還是下降,但這對我來說似乎不可行。
任何人有怎樣保存方向性的想法?
您可以使用遞歸來解決問題。在每個可行位置放置第一個單詞。對於每一個,將第二個單詞放在每個可行的位置。對於第一個和第二個的每個配對,將第三個單詞放在每個可行位置。遞歸方法可能寫成'recurse(partially_filled_crossword,remaining_words)',這兩個參數都是數組,返回一個表示完成字符串的數組(array);如果沒有有效的完整字符串存在,那麼搜索樹的該部分就不存在。 –