数组dfs

给定一个二值图像(二维数组), 判断 p[h_i][w_i] p[h_j][w_j] 是否联通。

class Solution:
    def moving(self, matrix, startx, starty, endx, endy):

        def dfs(matrix, startx, starty, endx, endy, rows, cols):
            if startx == endx and starty == endy:
                return True

            if startx > 0 and matrix[startx-1][starty] == 1:
                tmp = matrix[startx][starty]
                matrix[startx][starty] = "#"
                if dfs(matrix, startx-1, starty, endx, endy, rows, cols):
                    return True
                matrix[startx][starty] = tmp

            if startx < rows-1 and matrix[startx+1][starty] == 1:
                tmp = matrix[startx][starty]
                matrix[startx][starty] = "#"
                if dfs(matrix, startx+1, starty, endx, endy, rows, cols):
                    return True
                matrix[startx][starty] = tmp

            if starty > 0 and matrix[startx][starty-1] == 1:
                tmp = matrix[startx][starty]
                matrix[startx][starty] = "#"
                if dfs(matrix, startx, starty-1, endx, endy, rows, cols):
                    return True
                matrix[startx][starty] = tmp

            if starty < cols-1 and matrix[startx][starty+1] == 1:
                tmp = matrix[startx][starty]
                matrix[startx][starty] = "#"
                if dfs(matrix, startx, starty+1, endx, endy, rows, cols):
                    return True
                matrix[startx][starty] = tmp

        rows, cols = len(matrix), len(matrix[0])
        if matrix[startx][starty] == 1:
            if dfs(matrix, startx, starty, endx, endy, rows, cols):
                return True
        return False2

s = Solution()
matrix = [[0,1,0,0,0], [0,0,1,0,1], [0,1,1,1,0], [0,0,1,1,1]]
startx = 1
starty = 2
endx = 3
endy = 4
result = s.moving(matrix, startx, starty, endx, endy)
print(result)

你可能感兴趣的:(基础算法)