leecode岛屿数量

题目描述
可用解法
DFS 深度优先遍历
BFS 广度优先遍历
算法思路:下列代码用BFS,循环遍历输入的二维列表如果遇到岛屿(即为1),将其作为根节点作BFS,注意BFS要记录下访问过的结点,如果访问过则不再加入树中

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        self.grid = grid
        num = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                # BFS
                if grid[i][j] == "1":
                    quene = list()
                    num += 1
                    quene.append([i, j])
                    grid[i][j] = "1"
                    while len(quene) != 0:
                        x, y = quene[0]
                        del quene[0]
                        # up
                        if self.Ingrid(x - 1, y) and grid[x-1][y] == "1":
                            grid[x - 1][y] = "0"
                            quene.append([x - 1, y])
                        # down
                        if self.Ingrid(x + 1, y) and grid[x+1][y] == "1":
                            grid[x + 1][y] = "0"
                            quene.append([x + 1, y])
                        # left
                        if self.Ingrid(x, y - 1) and grid[x][y-1] == "1":
                            grid[x][y - 1] = "0"
                            quene.append([x, y - 1])
                        # right
                        if self.Ingrid(x, y + 1) and grid[x][y+1] == "1":
                            grid[x][y + 1] = "0"
                            quene.append([x, y + 1])
        return num

    def Ingrid(self, i, j):
        if i >= 0 and i < len(self.grid) and j >= 0 and j < len(self.grid[0]):
            return True
        else:
            return False

# s = Solution().numIslands([["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]])
# print(s)

你可能感兴趣的:(leecode岛屿数量)