Swim in Rising Water

update Jun 21, 2021

image

Basic Idea

这道题就是说给定一个格子是一个水池,里面的数字代表池子中每个小方块的高度,t表示时间,水位随时间上升,只有水位超过某高度才能游过去,问需要的最低水面高度。

  1. 有两种思路,比较容易想到的是二分法,即二分t的值,直到找到能游到右下角所需的最小t,每次验证需要O(N^2)的时间。

  2. 另一种思路是Dijkstra, 每个node的score是它的高度,也就是此处grid中每个格子的value。我个人觉得这并不是典型的dijkstra,因为它在这里解决的不是最短路径问题,但是如果把它理解为BFS2就好理解一些。其实这种做法相当于在模拟真实的水流,总是在当前能接触到的格子中选择最低的先流过去,如果能流到右下角就结束,而返回值就是在这个过程中出队列过的数字的最大值。

Java Code

2. BFS2 (Dijkstra)

Last updated