山峰与山谷
给定一个n∗n的网格状地图,每个方格(i,j) 有一个高度w[i] 。如果两个方格有公共顶点,则它们是相邻的。
定义山峰和山谷如下:
均由地图上的一个连通块组成; 所有方格高度都相同; 周围的方格(即不属于山峰或山谷但与山峰或山谷相邻的格子)高度均大于山谷的高度,或小于山峰的高度。 求地图内山峰和山谷的数量。特别地,如果整个地图方格的高度均相同,则整个地图既是一个山谷,也是一个山峰。
此题细节比较多,发此题解纪念一下。
题意
求两种联通块的数量。其中:
第一种 周围的不属于该联通块的方格均大于该方格
第二种 周围的不属于该联通块的方格均小于该方格
分析
题目是一张图,因此我们很容易想到DFS或BFS求联通块。
注:本题解采用BFS
主要目的 向四周寻找属于联通块的方格,每一个方格都要照顾到。
实现细节
① 本题目中方格的8个方向都可以成为待选的联通块。
所以我们定义八个方向的预处理数组:
int d[][2]{0,1,0,-1,1,0,-1,0,1,-1,-1,-1,-1,1,1,1};
等同于
int dx[8]={0,0,1,-