2011-06-08 25 views
4

我正在尋找一種算法來幫助我基於規則構建2D模式。我的想法是,我可以使用給定的參數位置編寫腳本,並且它會返回一個隨機的2維序列,直到給定的長度。2D PHP模式創建器Altgorithm

我的計劃是使用它來基於規則生成圖像模式。比如圖像分形或者遊戲關卡的精靈可能會使用它。

例如,假設您可以使用A,B,C,& D創建模式。規則是C和A永遠不會彼此相鄰,並且D總是遵循C.接下來,讓我們說我想要一個尺寸爲4x4的模式。結果可能是尊重所有規則的以下內容。

A B C D 
B B B B 
C D B B 
C D C D 

是否有任何現有的庫可以做這樣的計算?有什麼數學公式可以讀取嗎?

+1

什麼樣的「規則」?這種「規則」的格式是什麼? – mauris 2011-06-08 22:35:08

+0

現在只是關於當前符號的北/東/南/西的符號的基本規則。我認爲對X個空格內的符號的支持也會很整齊(但可能會慢很多)。 – Xeoncross 2011-06-08 22:40:58

+0

http://properundead.com/2009/03/cave-generator.html – Xeoncross 2011-06-09 03:13:55

回答

2

儘管運行時相當低效,但是對於這樣的問題,backtracking是一種經常使用的算法。

它遵循一個簡單的模式,如果正確寫入,您可以輕鬆地將規則集替換成它。

+1

我發現這很棒[使用JavaScript編寫的示例](http://www.hbmeyer.de /backtrack/backtren.htm)。 – Xeoncross 2011-06-08 22:43:19

+0

似乎還有很多[單向維度版本的回溯](http://stackoverflow.com/questions/2617055/how-to-generate-all-permutations-of-a-string-in-php)。 – Xeoncross 2011-06-08 22:48:31

+0

這個話題似乎有很多提及[8-Queens](http://paulbutler.org/archives/n-queens-in-a-tweet/),所以我找到了一個[303個字符的PHP解決方案](http://files.dropbox.com/u/396326/nqueens.txt)。 – Xeoncross 2011-06-08 22:52:30

1

定義您的規則數據結構;即定義規則可以封裝的一組操作,並且定義可以完成的可用交叉引用。完成此操作後,您應該更清楚地瞭解要使用哪種算法將這些規則應用於潛在結果集。

1

假設您的規則限制爲「類型X被允許立即向其左/右/上/下搜索類型Y」您可能有產生可能模式的計算困難的情況。看看Wang Tiles(一個很好的來源是Grunbaum和Shephard的書籍Tilings and Patterns),你會發現用狀態集規則可以定義一組王牌。適當的這些是圖靈完成。

對於小矩形或您的規則集,這可能只有學術興趣。正如其他地方所提到的,回溯法可能適用於您的規則集 - 在這種情況下,您可能需要考慮適當的啓發式方法以將新組件添加到網格中。再次,根據您的規則集,其他方法可能會起作用。例如。如果你的規則集承認了許多解決方案,那麼在嘗試填補剩餘的空白之前,可以通過將許多項目隨機分配給網格來獲得很長的路徑。