城堡問題 Flood Fill

2021-10-08 19:49:46 字數 2154 閱讀 3997

1   2   3   4   5   6   7  

#############################

1 # | # | # | | #

#####---#####---#---#####---#

2 # # | # # # # #

#---#####---#####---#####---#

3 # | | # # # # #

#---#########---#####---#---#

4 # # | | | | # #

#############################

(圖 1)

# = wall

| = no wall

- = no wall

方向:上北下南左西右東。

圖1是乙個城堡的地形圖。

請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。

城堡被分割成 m∗n個方格區域,每個方格區域可以有0~4面牆。

注意:牆體厚度忽略不計。

輸入格式

第一行包含兩個整數 m 和 n,分別表示城堡南北方向的長度和東西方向的長度。

接下來 m 行,每行包含 n 個整數,每個整數都表示平面圖對應位置的方塊的牆的特徵。

每個方塊中牆的特徵由數字 p 來描述,我們用1表示西牆,2表示北牆,4表示東牆,8表示南牆,p 為該方塊包含牆的數字之和。

例如,如果乙個方塊的 p 為3,則 3 = 1 + 2,該方塊包含西牆和北牆。

城堡的內牆被計算兩次,方塊(1,1)的南牆同時也是方塊(2,1)的北牆。

輸入的資料保證城堡至少有兩個房間。

輸出格式

共兩行,第一行輸出房間總數,第二行輸出最大房間的面積(方塊數)。

資料範圍 1 ≤ m,n ≤ 50, 0 ≤ p ≤ 15

輸入樣例:

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

輸出樣例:

5

9

每個方塊中牆的特徵由數字 p 來描述,我們用1表示西牆,2表示北牆,4表示東牆,8表示南牆,p 為該方塊包含牆的數字之和。 例如,如果乙個方塊的 p 為3,則 3 = 1 + 2,該方塊包含西牆和北牆。 可以用二進位制位來判斷有沒有牆,由於加起來和不超過 15 ,所以有四位 二進位制數 ,第一位為 1 表示有西牆... 以此類推, 我們將遍歷方向 與 數字 p 右移 >> & 1 所到位置牆的方向表示一致

#include

using

namespace std;

const

int n =55;

int m,n;

int g[n]

[n];

bool st[n]

[n];

intbfs

(int sx,

int sy)

;//與二進位制位一樣的方向

int dy=

;int area =0;

queueint,

int>>q;

q.push()

; st[sx]

[sy]

=true

;while

(q.size()

)); st[xx]

[yy]

=true;}

}return area;

}int

main()

int cnt =

0,area =0;

for(

int i =

1; i <= m; i++)}

cout << cnt <<

'\n'

<< area << endl;

return0;

}

城堡問題 Flood Fill

123 4567 1 2 3 4 圖 1 wall no wall no wall方向 上北下南左西右東。圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成 m nm n個方格區域,每個方格區域可以有0 4面牆。注意 牆體厚度忽略不計。輸入格式 第一行包...

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 ...