问题:给出一个由0和1组成的二维网格图(m*n),1表示陆地,0表示水。要求统计有多少块陆地
思路:常见的flood fill算法有三种,深度优先搜索、广度优先搜索以及广度扫描法。广度扫描法其实原理与广度优先搜索类似,只是在解空间比较大时,深度优先搜索占用的栈空间比较大,广度优先搜索在队列中占用的空间比较大。广度扫描法相当于是用时间来换取空间。此问题使用广度优先搜索时间复杂度为O(m*n),空间复杂度最坏为O(m*n),用广度优先搜索时间复杂度为O(m*n),空间复杂度为O(4^k),其中k表示深度,而用广度扫描法时间复杂度为O(m^2*n^2),空间复杂度为O(m*n)。另外一种方法是使用并查集
具体代码参考:
https://github.com/wuli2496/OJ/tree/master/LeetCode/Number%20of%20Islands