C 搜尋與回溯演算法之城堡問題

2021-08-02 23:32:33 字數 1435 閱讀 9732

城堡問題

1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---#####---# 3 # | | # # # # # #---#########---#####---#---# 4 # # | | | | # # ############################# (圖 1) # = wall | = no wall - = no wall

圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成m,n(m≤50,n≤50)個方塊,每個方塊可以有0~4面牆。

程式從標準輸入裝置讀入資料。第一行是兩個整數,分別是南北向、東西向的方塊數。在接下來的輸入行裡,每個方塊用乙個數字(0≤p≤50)描述。用乙個數字表示方塊周圍的牆,1表示西牆,2表示北牆,4表示東牆,8表示南牆。每個方塊用代表其周圍牆的數字之和表示。城堡的內牆被計算兩次,方塊(1,1)的南牆同時也是方塊(2,1)的北牆。輸入的資料保證城堡至少有兩個房間。

城堡的房間數、城堡中最大房間所包括的方塊數。結果顯示在標準輸出裝置上。

4 

7 11 6 11 6 3 10 6

7 9 6 13 5 15 5

1 10 12 7 13 7 5

13 11 10 8 10 12 13

8

389 207 155 300 299 170 158 65

懶得寫思路的鄙人直接寫了注釋,以下是鄙人拙劣的**:

#include#include#includeusing namespace std;

int m,n,ans,cnt,biggest; //變數比較亂,慢慢領悟(*^__^*) 嘻嘻……

bool flag[100][100],mark[100][100][4];

int map[105][105];

int wayr[4]=,wayc[4]=; //此方向不可改,( ⊙o⊙ )千真萬確

bool check(int a,int b,int x) //判斷函式,一次性囊括所有判斷(包括剪枝),~\(≧▽≦)/~啦啦啦

void dfs(int r,int c) //深搜函式,內部構造簡單,~o(∩_∩)o~

}int main()

printf("%d\n%d\n",ans,biggest); //♪(^∇^*),ac啦,ㄟ(≧◇≦)ㄏ

}

深度優先搜尋之城堡問題

下圖是乙個城堡的地形圖,請你編寫乙個程式,計算城堡一共有多少個房間,最大的房間有多大。城堡被分割成mxn m 50,n 50 個方塊,每個方塊可以有4面牆。代表牆,代表不是牆,走的通的就是乙個房間 輸入程式從標準輸入裝置讀入資料。第一行是兩個整數,分別是南北向 東西向的方塊數。在接下來的輸入行裡,每...

搜尋與回溯演算法

搜尋與回溯是計算機解題中常用的演算法,很多問題無法根據某種確定的計算法則來求解,可以利用搜尋與回溯的技術來求解。回溯是搜尋演算法中的一種控制策略。回溯的基本思想是 為了求得問題的解,先選擇某一種可能的情況向前探索,在探索過程中,一旦發現原來的選擇是錯誤的,就退回一步重新選擇,繼續向前探索,如此反覆進...

搜尋與回溯演算法

搜尋與回溯演算法是計算機解題中的常用的演算法 基本思想 為了求得問題的解,先選擇某一種可能情況向前探索,在探索過程中,一旦發現原來的選擇是錯誤的,就退回一步重新選擇,繼續向前探索,如此反覆進行,直至得到解或證明無解。搜尋與回溯演算法是為了解決無法根據某種確定的計算法則來求解的問題,可以利用搜尋與回溯...