POI2007 山峰和山谷Grz

2022-05-31 19:21:12 字數 1930 閱讀 7090

description

fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠讓他對他的旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為\(n\times n\)的網格,每個格仔(i,j) 的高度w(i,j)是給定的。若兩個格仔有公共頂點,那麼他們就是相鄰的格仔。(所以與(i,j)相鄰的格仔有(i-1, j-1),(i-1,j),(i-1,j+1),(i,j-1),(i,j+1),(i+1,j-1),(i+1,j),(i+1,j+1))。我們定義乙個格仔的集合s為山峰(山谷)當且僅當:1.s的所有格仔都有相同的高度。2.s的所有格仔都聯通3.對於s屬於s,與s相鄰的s』不屬於s。都有ws > ws』(山峰),或者ws < ws』(山谷)。你的任務是,對於給定的地圖,求出山峰和山谷的數量,如果所有格仔都有相同的高度,那麼整個地圖即是山峰,又是山谷。

input

第一行包含乙個正整數n,表示地圖的大小(1<=n<=1000)。接下來乙個\(n\times n\)的矩陣,表示地圖上每個格仔的高度。(0<=w<=1000000000)

output

應包含兩個數,分別表示山峰和山谷的數量。

bfs水題,為什麼會有那麼多人想到用dfs???應該是我太菜了……

bfs拓展的時候記錄一下自己本身是山谷還是山峰,如果都是,那麼不合法;如果都不是,兩個答案都加;否則是哪個就加哪個

/*program from wolfycz*/

#include#include#include#include#include#define inf 0x7f7f7f7f

using namespace std;

typedef long long ll;

typedef unsigned int ui;

typedef unsigned long long ull;

inline int read()

inline void print(int x)

const int n=1e3;

const int dx[8]=;

const int dy[8]=;

int map[n+10][n+10];

int hx[n*n+10],hy[n*n+10];

bool vis[n+10][n+10];

int n,peak,valley;

bool in_map(int x,int y)

void bfs(int x,int y)

if (map[tx][ty]map[nx][ny]) valley=1;

} }if (peak&&valley) return;

if (!peak&&!valley) peak++,valley++;

if (peak) peak++;

if (valley) valley++;

}int main()

1454 山峰和山谷

時間限制 1000 ms 記憶體限制 65536 kb 提交數 93 通過數 28 給定乙個 n n 的網格狀地圖,每個方格 i,j 有乙個高度 wij 如果兩個方格有公共頂點,則它們是相鄰的。定義山峰和山谷如下 均由地圖上的乙個連通塊組成 所有方格高度都相同 周圍的方格 即不屬於山峰或山谷但與山峰...

Flood Fill 山峰和山谷

fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n n 的網格,每個格仔 i,j 的高度 w i,j 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如與 i,j 相鄰的格仔有 ...

山峰和山谷 Flood Fill

fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠對旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n n 的網格,每個格仔 i,j 的高度 w i,j 是給定的。若兩個格仔有公共頂點,那麼它們就是相鄰的格仔,如與 i,j 相鄰的格仔有 ...