5.4——200:岛屿问题

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
 
 
一、解题思路——把一块“区域”看作是一个图,图的个数即是岛屿的个数。难点在于如何把区域内的所有结点都找到,对于这道题用DFS和BFS均可
1.对图进行深度优先遍历(上下左右四个方向为子结点)。当结点不是10(海)或者是 已读)的时候,认为这条支路已经到底了,返回到上一层继续深度优先遍历
2.每次遍历都会将当前结点标记为已访问(确保它的子结点不会把它本身当作父结点)
3.遍历完成后,返回。开始下一个结点的遍历。直到遍历完所有可遍历结点
 
二、源码
class Solution: def numlslands(self, gr 、 id: List[List[str 、 ]]) def DFS(1ises, x, y): # 坐 标 合 法 且 是 未 访 间 过 的 if 9 < : x < len(lises) and 9 < : y 〈 一 > Int len(lises[x]) and lises x ' f # 标 记 为 已 访 间 过 , 不 会 重 复 访 间 囗 重 , 返 回 lises[x][y] x 1 丿 y) # 上 DFS(1ises, 妇 果 甬 以 访 问 的 标 讠 己 会 将 某 一 结 点 的 有 符 x + 的 y) # 下 DFS(1ises, , x, y 1 ) # 左 DFS 的 结 点 标 记 为 已 访 问 。 在 下 一 次 历 的 时 候 会 跳 DFS(1ises , x, y + 1 ) # 右 过 已 访 问 点 DFS(1ises 跳 出 这 次 诬 归 ” 说 明 本 次 D 巧 扌 叟 索 到 底 了 r 、 eturn # 泫 样 循 环 次 数 为 " 区 的 个 而 不 是 有 " 岛 结 点 " 的 个 数 9 for 、 in range(len(gr 、 id)): fo ' 、 j in range(len(grid[i])) : if g r 谰 巨 ] [ j ] DFS(grid, i, 0 ) 1 、 n
 
 

猜你喜欢

转载自www.cnblogs.com/xiaoqichaoren/p/12951851.html