百練OJ 2815 城堡問題 DFS

2021-07-29 21:17:27 字數 1249 閱讀 9708

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

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

用1,2,4,8標記方向乍看之下覺得麻煩,其實很方便。在計算機內部儲存下,1為0001,2為0010,4為0100,8為1000。所以利用位運算可以方便的知道方向。

然後用就是標準的dfs,一開始標記所有的點為新點,然後列舉每乙個點能走的情況,每走過乙個點就將這個點進行標記。然後對變數進行更新就行了。

#include

#include

#include

#include

#include

using

namespace

std;

int r,c;

int color[60][60];

int room[60][60];

int maxarea = 0,roomnum = 0;

int roomarea;

void dfs(int i,int j)

int main()}}

cout

0;}

百練2815 城堡問題(DFS)

總時間限制 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 個方塊,每個方塊可以有...

百練2815 城堡問題(DFS)

描述 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面牆。輸入程式從標準輸入裝置讀入資料。第一行是兩...

百練 2815 城堡問題

總時間限制 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...