剑指offer 矩阵中的路径

思想:标准的回溯法
实现:

  • 使用hash表标记元素是否已经被访问
  • 使用全局变量以及在函数内定义函数尽量减少代码量
class Solution_hash:
    def hasPath(self, matrix, rows, cols, path):
        if not matrix or cols < 1 or rows < 1 or not path:
            return False

        self.hash = {}

        def DFS(i, j, index):
            if check(i, j, index):
                self.hash[(i, j)] = 1  # 标记当前节点已经被访问
                if index == len(path) - 1: return True
                flag = DFS(i + 1, j, index + 1) or DFS(i, j + 1, index + 1) or \
                       DFS(i - 1, j, index + 1) or DFS(i, j - 1, index + 1)
                self.hash.pop((i, j))  # 当前节点的后续节点都没有找到合适的路径 释放点当前节点 允许再次访问
                return flag
            return False

        def check(i, j, index):  # 对于当前节点的合法性进行判断
            return 0 <= i < rows and 0 <= j < cols and (i, j) not in self.hash and matrix[i * cols + j] == path[index]

        for i in range(rows):
            for j in range(cols):
                if DFS(i, j, 0): return True
        return False
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,...
    Longshihua阅读 2,394评论 0 0
  • 本文首发于我的个人博客:尾尾部落 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的...
    繁著阅读 3,474评论 0 1
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,400评论 0 27
  • 树有树的颜色,草有草的芬芳。每种东西,都有它存在的价值,不是存在于别人的标准之中,而是存在它们本身之中。
    落辛阅读 1,148评论 0 3
  • 始 那个圣诞节后,我的路就往着人生林荫道的另一条去了,走的很慢,但这新的路也就开始了,因为不情愿迈步但想振作起来,...
    Yanruoy阅读 1,571评论 0 0

友情链接更多精彩内容