P13429 [GCJ 2009 Qualification] Watersheds

题目描述

地质学家有时会根据降雨流向将一片区域划分为不同的区域,这些区域被称为**流域**。 给定一张高程图(即一个二维的高度数组),请对地图进行标记,使得同属一个流域的区域具有相同的标记,并满足以下规则: - 从每个格子出发,水最多只能流向其四个相邻格子中的一个。 - 对于每个格子,如果它的四个邻居中没有任何一个高度低于它自身,则水不会流动,该格子被称为**汇**。 - 否则,水会从该格子流向高度最低的邻居。 - 如果有多个邻居高度同为最低,则水会选择以下顺序中第一个最低的方向:北、 西、 东、 南。 所有直接或间接流向同一个汇的格子都属于同一个流域。每个流域应分配一个独特的小写字母作为标记,并且要保证:当将地图的所有行自上而下拼接成一个字符串时,所得字符串的字典序最小(特别地,最西北角的格子的流域标记总是 'a')。

输入格式

输入的第一行包含地图的数量 $T$。接下来有 $T$ 个地图,每个地图的第一行为两个整数 $H$ 和 $W$,分别表示地图的高和宽(单位为格子数)。接下来的 $H$ 行,每行包含 $W$ 个整数,表示从北到南的每一行,从西到东的每一列,对应格子的高度。

输出格式

对于每组测试数据,输出 $1+H$ 行。第一行格式如下: Case #$X$: 其中 $X$ 是测试编号,从 1 开始。接下来的 $H$ 行,输出每个格子的流域标记,顺序与输入一致。

说明/提示

**样例说明** 在第 1 组数据中,右上角和左下角是汇。对角线上的水会流向左下角,因为那里高度较低(5 比 6 小)。 **限制条件** - $T \leq 100$ **小数据集(10 分)** - 时间限制:2 秒。 - $1 \leq H, W \leq 10$; - $0 \leq \text{高度} < 10$; - 最多有 2 个流域。 **大数据集(23 分)** - 时间限制:3 秒。 - $1 \leq H, W \leq 100$; - $0 \leq \text{高度} < 10,000$。 - 最多有 26 个流域。 翻译由 ChatGPT-4.1 完成。