专题五:floodfill算法(太平洋大西洋水流问题)
以leetcode417题为例
题目解析:
整张图,左边深蓝的是太平洋,右边浅蓝的是大西洋,你需要在矩阵中找到一个点,使其可以流向太平洋又可以流向大西洋,并且你每次流的时候只能由高到低,或者相等到相等
算法原理解析:
第一种解法:暴力枚举每一个点是否能流向太平洋和大西洋,也就是一行一行的枚举每一个点
但可能会有重复的路径的枚举,而且会不断的dfs,可能会超时
第二种解法:正难则反,看太平洋的水能由哪留到,也就是枚举从低到高的点,就是水能蔓延的哪
比如从太平洋每一个最上一行和最左一列的每一个点可以蔓延到哪,所有绿色框起来的都可以
在枚举最下面一行和右边一列的所有点能蔓延到哪,
所有重复的点就是可以到太平洋和大西洋 (红色三角可以流向大西洋和绿色方块流向太平洋)
代码编写: