把每个位置看成一个高度为h[i][j]的格子。
一个位置如果想把水排到边界,一定存在一条从它走到边界的路径,并且沿途高度不能升高。因为水只会从高处流向低处或者同高度的位置。 所以我们可以反过来想:
从边界开始做一次搜索,如果当前在位置(x,y),那么可以走到相邻位置(nx,ny)当且仅当
某山区的地形可以表示为一个 H 行 W 列的网格,每个格子对应一个海拔高度。一场暴雨过后,降水只能凭借重力在相邻格子之间流动。具体来说,水可以从一个格子流向上下左右相邻的格子,当且仅当相邻格子的海拔不高于当前格子的海拔。最终,一部分水会沿着不升高的路径流到整个区域的边界并排出,而另一些被地形包围、无法到达边界的低洼区域则会蓄水成湖。
我们定义“湖泊”为一个由若干格子组成的最大限度连通区域,该区域中任意一个格子均无法找到一条不升高的路径到达网格边界,且区域内部上下左右相邻的格子均属于同一个湖泊。请你计算暴雨过后形成的湖泊数量。
约束条件:
第一行包含两个整数 H 和 W,用空格分隔。 接下来 H 行,每行包含 W 个整数,依次表示该行每一列的海拔高度,相邻整数之间用空格分隔。
输出一个整数,表示最终形成的湖泊总数。
输入
3 3
5 5 5
5 1 5
5 5 5
输出
1
说明
边界格子的海拔均为 5,水可以直接流出区域。中间格子的海拔为 1,其四个相邻格子的海拔均为 5,均高于自身,因此水无法向任何方向流动,不能到达边界。该格子形成一个独立的湖泊,湖泊总数为 1。
输入
3 5
5 5 5 5 5
5 1 9 2 5
5 5 5 5 5
输出
2
说明
边界海拔均为 5。内部有三个格子,海拔分别为 1、9、2。
海拔 9 的格子水可以流向相邻海拔 5 的边界格子(因为 5≤9),故该格子能排水,不属于湖泊。
海拔 1 和 2 的格子无法流向 9 或 5(因为 9>1,5>2),且这两个格子被 9 隔开,不相邻,因此各自形成一个独立的湖泊。最终湖泊总数为 2。
输入
2 2
1 1
1 1
输出
0
说明
所有格子的海拔均为 1,且每个格子都位于边界或与边界相邻。水可以从任意格子沿不升高的路径流向区域外,不存在无法到达边界的格子,因此湖泊数量为 0。
输入
1 1
10
输出
0
说明
网格只有 1 行 1 列,唯一的格子本身就是边界。水可以直接流出区域,没有无法到达边界的格子,因此湖泊数量为 0。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册