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 相鄰的格仔有 ...