【剑指offer】65 矩阵中的路径

题目

在这里插入图片描述

分析

在矩阵中从0,0未知开始遍历,每次找到path的开头,开始dfs寻找path下一个字符是否在上下左右的位置。需要考虑的是边界条件:

  • 1,path寻找到尾部,存在路径返回true
  • 2,坐标超出矩阵范围,返回false
  • 3,坐标已经被加入路径,返回false
  • 4,坐标值等于path当前字符,将坐标加入路径
    • 4.1 如果dfs找到剩余路径,返回true
    • 4.2 如果没有找到剩余路径,将坐标退出路径, 返回false

python代码


class Solution:
    def __init__(self):
        self.matrix = None
    def hasPath(self, matrix, rows, cols, path):
        # write code here
        self.matrix = matrix
        self.flag =[ [ [0]for i in range(cols)] for j in range(rows)]
        for i in range(rows):
            for j in range(cols):
                if self.matrix[i][j]==path[0]:
                    if self.dfs(i,j,path):
                        return True
        return False
    def dfs(self,x,y,path):
        if path == "": return True
        if x<0 or y<0 or x>len(self.matrix)-1 or y>len(self.matrix[0])-1:
            return False
        if self.flag[x][y]==1:
            return False
        if self.matrix[x][y]!=path[0]:
            return False
        else:
            self.flag[x][y] = 1
            if self.dfs(x+1,y,path[1:]) or self.dfs(x-1,y,path[1:]) or self.dfs(x,y+1,path[1:]) or self.dfs(x,y-1,path[1:]):
                return True
            else:
                self.flag[x][y] = 0
                return False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值