1 条题解
-
0
思路
相等高度的八连通平台整体判断是否有更高/更低邻居;整图等高同时为峰谷,不能按单格或四连通计数。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin>>n;vector<int>a(n*n);for(auto &x:a)cin>>x;vector<char>seen(n*n);int peaks=0,valleys=0;for(int i=0;i<n*n;i++)if(!seen[i]){bool higher=false,lower=false;queue<int>q;q.push(i);seen[i]=1;while(!q.empty()){int v=q.front();q.pop();int x=v/n,y=v%n;for(int dx=-1;dx<=1;dx++)for(int dy=-1;dy<=1;dy++)if(dx||dy){int X=x+dx,Y=y+dy;if(X<0||X>=n||Y<0||Y>=n)continue;int u=X*n+Y;if(a[u]>a[v])higher=true;else if(a[u]<a[v])lower=true;else if(!seen[u]){seen[u]=1;q.push(u);}}}peaks+=!higher;valleys+=!lower;}cout<<peaks<<' '<<valleys<<'\n';}
- 1