N 城堡問題

2022-08-21 06:00:18 字數 1657 閱讀 3063

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面牆。 

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

sample input

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

sample output

5

9注:1)給的是數字之和,怎麼判斷哪個方向有牆呢?

11(10) == 1011(2);

1(10) == 1(2); 2(10) == 10 ;4(10) == 100;8(10) == 1000;

11&1 比較二進位制的最後一位,兩個都是1,所以結果是1。代表有牆。

11&2 比較二進位制的後兩位,最後一位不同,是0,倒數第二位相同,所以是1,結果是10,代表有牆

11&4 比較二進位制的後三位,三位都不同,所以結果是000,代表沒牆

11&8 比較二進位制的後四位,結果是1,代表有牆。

2)向四個方向走的時候,根據i,j的變化,根據變化去dfs遞迴。

3)城堡的房間數 == 連通子圖的個數

城堡中最大房間所包括的方塊數 == 連通子圖的結點最大個數

#include#include#include#define m 55

using namespace std;

int room[m][m];

int color[m][m];

int roomnum,roomarea,maxroomarea = 0;

void dfs(int i, int j)

int main()

}cout<} return 0;

}

1817 城堡問題

總時間限制 1000ms 記憶體限制 65536kb 描述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...

35 城堡問題

如圖是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成 m n m 50,n 50 個方塊,每個方塊可以有 0 4 面牆。資料保證城堡四周都是牆 輸入 輸出 樣例輸入47 11 6 11 6 3 10 6 7 9 6 13 5 15 5 1 10 12 7 ...

城堡問題 Flood Fill bfs

1 2 3 4 5 6 7 1 2 3 4 圖 1 no wall 方向 上北下南左西右東。圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成 m nm n個方格區域,每個方格區域可以有0 4面牆。輸入格式 第一行包含兩個整數 mm 和 nn,分別表示城...