数组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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值