我必須找出一個算法,找到連接牆的遊戲的解決方案。連接牆算法
在連接牆我們有矩形形狀板劃分成相等,正方形單元格。在每個單元格中,我們可以放置一個對角牆(從左上角指向右下角或從左下角指向右上角)。我們必須根據以下規則把牆壁中的所有空的空間:
- 每個單元都必須包含一個牆
- 牆壁不能形成閉環(我們不能「砌體」)
- 連接到支柱必須在支柱
- 書面 數量相匹配。另外一些細胞中可能含有的牆壁,我們不能移動壁的數目。
請幫助。
編輯:
好的。我設法用C編寫了簡化算法。我需要有人來檢查我。它現在這樣工作:Steps
此外,我有一個關於最後的蠻力步驟的問題。 我可以隨機挑選一個細胞嗎? (也許有更快的方式) 蠻力算法我的理解:
- 選擇第一個單元格,並將其標誌/或\
- 檢查它是否符合支柱的標準,如果沒有周期
- 如果一切都OK轉到空的相鄰小區,如果不是在先前的細胞 備份和 改變牆壁的方向(如果我們之前沒有做)
- 循環播放,直到我們將不會對空單元格我們的董事會是對的嗎?
還有一個關於快速循環檢查的問題。 我已經想通了,我可以使用不相交的集合和連接組件的圖形功能。 所以...我們在find-union結構中保持圖的連接組件。 如果新近添加的邊(牆)連接來自同一連接組件的點 - 這是一個循環。
這功課嗎? – Jon 2011-03-30 10:14:08
有點功課。正如斯蒂芬鍾寫道,我試圖擺脫首先爲支柱「0」「2」和角落「1」的邊界案件。然後是所有的「4」支柱。然後排除所有的情況,當我們有「x」支柱和x個空閒點(周邊佔用點不與當前支柱相連)時。然後......我不知道 – marooou 2011-03-30 10:37:55
我試過「人類電腦」的方法(即玩遊戲),它看起來像只是迭代通過這些步驟將得到答案。很少需要多個級別的搜索。 – 2011-03-30 11:04:42