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