YbtOJ高效高階 廣搜 2 山峰和山谷

2021-10-16 22:21:16 字數 1280 閱讀 8369

ybtoj高效高階 廣搜-2

給定乙個 n*n 的網格狀地圖,每個方格 (i,j) 有乙個高度 wi,

jw_

wi,j

​ 。如果兩個方格有公共頂點,則它們是相鄰的。

定義山峰山谷如下:

均由地圖上的乙個聯通塊組成。

所有方格高度都相同。

周圍的方格(即不屬於山峰或山谷但與山峰或山谷相鄰的格仔)高度均大於山谷的高度,或小於山峰的高度。

求地圖內山峰和山谷的數量。特別的,如果整個地圖方格的高度均相同,則整個地圖即是乙個山谷,也是乙個山峰。

有與 (x,y) 有公共頂點的點集是(x,y) 的八連通,直播時口誤

5

8 8 8 7 7

7 7 8 8 7

7 7 7 7 7

7 8 8 7 8

7 8 8 8 8

2 1
每次找乙個新的沒訪問過的點,然後和相鄰的點去進行高度的對比,

1.如果當前連通塊的高度比找到的這個點的高度大,那就是山峰

2.如果小,那就是山谷

3.如果有大有小,那就啥也不是

4.如果最後找完了, 都沒有大小關係,那就既是山谷,又是山峰

#include

#include

#include

#include

#include

using

namespace std;

int n, flag1, flag2, ans1, ans2;

int w[

1005][

1005

], vis[

1005][

1005];

int dx[8]

=;int dy[8]

=;bool

check

(int x,

int y)

void

bfs(

int x,

int y)

}else}}

}if(!flag1 &&

!flag2) ans1++

, ans2++

;//對應情況4

if(flag1 &&

!flag2) ans1++

;//對應情況2if(

!flag1 && flag2) ans2++

;//對應情況1

}int

main()

YbtOJ練習 廣搜 2 射擊問題

這道題的難點在於如何判斷在某個時刻巨龍能否打中獵物,如果每一次巨龍走完都要check一次效率太低,而注意到獵物是不動的,我們可以初始化出能打中獵物的點,只要巨龍移動到這些位置,就完成搜尋。include define x first define y second using namespace s...

ybtoj 高效高階 1 4 深搜 數獨遊戲

用字串輸入 將其轉換成數值放入陣列a 陣列l統計當前行數字的使用情況 陣列r統計當前列數字的使用情況 陣列f統計當前3 3方格數字的使用情況 列舉當前格可以填的數字 include include include using namespace std int a 10 10 l 10 10 r 1...

ybtoj 高效高階 1 4 深搜 蟲食算

記錄下字母的出現順序 從右往左 列舉每個字母可能的數字 a是加數一,b是加數二,c是和 當這三個數已經填數時 否則進製賦為 1 include include include using namespace std string s 5 char q 30 int n,t,p 30 ans 30 u...