城堡問題 Flood Fill

2021-10-10 06:20:24 字數 1869 閱讀 9848

123

4567

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

1 # | # | # |

| #

#####--

-#####--

-#--

-#####--

-# 2 # # | # # # # #

#---#####--

-#####--

-#####--

-# 3 # |

| # # # # #

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

-#####--

-#--

-# 4 # # |||

| # #

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

(圖 1

) # = wall

|= no wall

-= no wall

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

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

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

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

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

輸入格式

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

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

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

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

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

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

輸出格式

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

資料範圍

1≤m,n≤501≤m,n≤50,

0≤p≤150≤p≤15

輸入樣例:

4 711 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

輸出樣例:

59

#include

#define x first

#define y second

using

namespace std;

typedef pair<

int,

int> pii;

const

int n=55;

int m,n;

int g[n]

[n];

bool st[n]

[n];

int dx[4]

=,dy[4]

=;intbfs

(int sx,

int sy));

st[sx]

[sy]

=true

;while

(q.size()

)); st[a]

[b]=

true;}

}return area;

}int

main()

}int cnt =

0, area =0;

for(

int i=

0;i} cout

}

城堡問題 Flood Fill

1 2 3 4 5 6 7 1 2 3 4 圖 1 wall no wall no wall 方向 上北下南左西右東。圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成 m 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 ...