搜尋8 noi1817 城堡問題

2021-09-07 14:08:24 字數 2210 閱讀 2099

一、心得

1、這題只是在普通的迷宮的基礎上面加上了牆的概念,所以基本的思路和**就和普通的迷宮是一樣的,只不過需要多加上一層牆的判斷

2、這裡牆的判斷是用的二進位制加上位運算的方法

二、題目

總時間限制: 

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

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

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

樣例輸入

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

**1164

三、分析

1、這題是dfs而非回溯

2、因為1表示西牆,2表示北牆,4表示東牆,8表示南牆。如果castle[i][j]&1==1;說明西邊有牆不能走

四、ac**

1/*2

* 1817:城堡問題

3* 分析:4*

5* 1、這題是dfs而非回溯

6* 2、因為1表示西牆,2表示北牆,4表示東牆,8表示南牆。如果castle[i][j]&1==1;說明西邊有牆不能走7*

8*/910

11 #include 12

using

namespace

std;

13int

southnorth, westeast;

14int castle[55][55

];15

int vis[55][55

];16

introomnum;

17int

roomsize;

18int maxroomsize=0;19

//1表示西牆,2表示北牆,4表示東牆,8表示南牆

20int gosouthnorth[4]=;

21int gowesteast[4]=;

2223

void

init() 31}

32//

2、變數初始化

33 roomnum=0;34

35}3637

void

print()

43 cout<45}

4647

void

printans()

50//

把乙個房間所有能訪問的格仔都給它訪問了

51void searchall(int starth,int

startw)66}

67}68}

6970

void

search()81}

82}83}

8485

intmain()

五、注意點

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

NOI2 5 1817 城堡問題

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

1817 城堡問題(深搜基礎題)不需要回溯

題目 輸入程式從標準輸入裝置讀入資料。第一行是兩個整數,分別是南北向 東西向的方塊數。在接下來的輸入行裡,每個方塊用乙個數字 0 p 50 描述。用乙個數字表示方塊周圍的牆,1表示西牆,2表示北牆,4表示東牆,8表示南牆。每個方塊用代表其周圍牆的數字之和表示。城堡的內牆被計算兩次,方塊 1,1 的南...