讀完題,這是一道和bfs聯通快有關的搜尋題,肯定要搜尋一些聯通快,而這道題的難點在於如何判斷當前的聯通快屬於山峰還是山谷。
因此,我們設計乙個演算法,在用bfs求聯通快的同時,判斷當前聯通快是山峰山谷或者啥都不是。
具體地,我們像往常一樣搜尋聯通快,若擴充套件的節點高度與當前聯通快不同,則開始判斷:如果大於,表明當前聯通快不可能為山峰。反之同理。
因此我們得到了乙個完整的演算法。
1 #include 2 #include 3 #include 4 #include 5 #include 6 typedef longac codelong
ll;7 inline int
read()
11while(c<='
9'&&c>='
0') ret=ret*10+c-'
0',c=getchar();
12return ret*f;13}
14using
namespace
std;
15int a[1010][1010],vis[1010][1010
],ans1,ans2,n,sum1,sum2;
16 queueqx;
17 queueqy;
18int fx[8]=;
19int fy[8]=;
20void bfs(int sx,int
sy)
37else41}
42}43}
44int
main()
57for(int i=1;i<=n;i++)
58for(int j=1;j<=n;j++)
59if(!vis[i][j])
65 printf("
%d %d\n
",ans1,ans2);
66return0;
67 }
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 相鄰的格仔有 ...