本题较为简单。本来是想讲另外一道题目的(UVa12171,例题 6-18),但是那道题目提到了 floodfill,那么,就先把这个 floodfill 这个知识点给讲了吧。

首先,搞清楚题目中的一些条件。

  • 输入的 m 和 n 分别代表行和列,其范围都是 $[1, 100]$。
  • * 代表空白,没有油的地块,而 @ 代表有油的地块。

然后,书上可能会让人觉得疑惑的点,

上面的代码用一个二重循环来找到当前格子的相邻 8 个格子,也可以用常量数组或写 8 条 DFS 调用。

这里说的是可以直接硬编码 8 个 DFS,因为每次遍历只需要 8 次的 DFS。或者,把这 8 次整成一个由 8 个向量组成的常量数组也可以。

剩余的就是一个简单的 DFS 了。直接看代码很容易理解。