2011-03-30 60 views
0

我必須找出一個算法,找到連接牆的遊戲的解決方案。連接牆算法

在連接牆我們有矩形形狀板劃分成相等,正方形單元格。在每個單元格中,我們可以放置一個對角牆(從左上角指向右下角或從左下角指向右上角)。我們必須根據以下規則把牆壁中的所有空的空間:

  1. 每個單元都必須包含一個牆
  2. 牆壁不能形成閉環(我們不能「砌體」)
  3. 連接到支柱必須在支柱
  4. 書面 數量相匹配。另外一些細胞中可能含有的牆壁,我們不能移動壁的數目。

Connect the walls online game

請幫助。

編輯:

好的。我設法用C編寫了簡化算法。我需要有人來檢查我。它現在這樣工作:Steps

此外,我有一個關於最後的蠻力步驟的問題。 我可以隨機挑選一個細胞嗎? (也許有更快的方式) 蠻力算法我的理解:

  1. 選擇第一個單元格,並將其標誌/或\
  2. 檢查它是否符合支柱的標準,如果沒有周期
  3. 如果一切都OK轉到空的相鄰小區,如果不是在先前的細胞 備份和 改變牆壁的方向(如果我們之前沒有做)
  4. 循環播放,直到我們將不會對空單元格我們的董事會是對的嗎?

還有一個關於快速循環檢查的問題。 我已經想通了,我可以使用不相交的集合和連接組件的圖形功能。 所以...我們在find-union結構中保持圖的連接組件。 如果新近添加的邊(牆)連接來自同一連接組件的點 - 這是一個循環。

+0

這功課嗎? – Jon 2011-03-30 10:14:08

+0

有點功課。正如斯蒂芬鍾寫道,我試圖擺脫首先爲支柱「0」「2」和角落「1」的邊界案件。然後是所有的「4」支柱。然後排除所有的情況,當我們有「x」支柱和x個空閒點(周邊佔用點不與當前支柱相連)時。然後......我不知道 – marooou 2011-03-30 10:37:55

+0

我試過「人類電腦」的方法(即玩遊戲),它看起來像只是迭代通過這些步驟將得到答案。很少需要多個級別的搜索。 – 2011-03-30 11:04:42

回答

1

有趣的遊戲。有點像掃雷機。

您是否僅對獲得解決方案感興趣?在這種情況下,這是一個簡單的樹搜索。有點像解決迷宮問題。回溯和東西。由於限制非常嚴格,所以易於修剪子樹。

快捷方式?尋找邊界上的所有「2」支柱。首先填滿他們。還要在角落填充「1」柱。將連接「0」柱的所有牆標記爲不可能的,但標記所有其他方向(因爲所有這些方塊都必須標記)。

然後,對於具有所需數量牆的每個支柱,將所有其他連接牆標記爲不可能,標記所有其他方向。然後用一個不可能的牆將所有其他與「3」柱連接的牆標記出來。標記所有其他牆壁連接到「2」柱子與兩個不可能的牆壁。然後是「1」支柱。循環。

這樣簡化了你的電路板之後,你必須在其餘未指定的牆上進行正常的樹搜索。標記一個潛在的牆,然後再次循環以消除可能性。

+0

那麼最後是N主教問題?我會試着實現它,看看它是如何工作的。感謝提示。 – marooou 2011-03-30 10:55:40

+0

那麼,N-bishops問題需要你通過搜索樹。這個看起來像你可以單獨使用迭代來完成。甚至不需要在樹上下一層。你做的每一個動作都消除了一系列的可能性,並且還要求其他動作等。 – 2011-03-30 11:03:23

+0

「4」支柱又如何?你忘了提及它,我想我們也可以排除它們周圍的細胞。 – marooou 2011-03-30 11:11:15