查看: 929| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] leetocde 505 请帮忙诊断我的DFS解法

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

leetocde 505
请大家帮忙看看,为何我的DFS的解法不对。 可以通过example的test case, 在提交后,不能通过。 很想知道自己的问题在哪里,找到自己逻辑上的根本原因。
  def shortestDistance(self, grid: List[List[int]], start: List[int], des: List[int]) -> int:
        dirs = [(0,1), (0,-1), (1,0), (-1,0)]
        dst = {}
        def next_pos(x, y, dx, dy):
            moves = 0
            while 0 <= x + dx < len(grid) and 0 <= y + dy < len(grid[0]) and grid[x + dx][y + dy] == 0:
                x += dx
                y += dy
                moves += 1
            return x, y, moves
        def dfs(grid, x, y):
            if [x, y] == des:
                return 0
            if (x, y) in dst:
                return dst[(x, y)]
            dst[(x, y)] = float('inf')
            res = float('inf')
            for dx, dy in dirs:
                new_x, new_y, moves = next_pos(x, y, dx, dy)
                cur =  dfs(grid, new_x, new_y)
                res = min(cur + moves, res)
                print((x, y), (new_x, new_y), cur, res)
            dst[(x, y)] = res
            return res
        res = dfs(grid, start[0], start[1])
        
        return -1 if res == float('inf') else res

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分


上一篇:图直径算法求教
下一篇:请问大家这样顺序刷题对吗?
推荐
九道 2023-10-4 05:20:09 | 只看该作者
全局:
作用不一样。你这个代码的bug在与这个dst在DFS完成所有neighbor遍历结束前就被有可能已经被设置为float('inf')了 。这就导致你正在DFS一个path的时候,当你到达一个已开始但未完成搜索的cell时,DFS会误认为它发现了一个循环。你的dst实际上可以减少一部分冗余计算,但是不能启到visited set避免cycling的作用。

评分

参与人数 2大米 +3 收起 理由
14417335 + 1 给你点个赞!
AmyFBKX + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
九道 2023-10-4 01:27:16 | 只看该作者
全局:
你的dfs没有标记visited会死循环。
回复

使用道具 举报

🔗
 楼主| AmyFBKX 2023-10-4 04:37:19 | 只看该作者
全局:
九道 发表于 2023-10-3 10:27
你的dfs没有标记visited会死循环。

谢谢您的留言。我有一个变量dst,记录访问过的点, 类似visit的。目前尚未出现死循环的提示
回复

使用道具 举报

🔗
 楼主| AmyFBKX 2023-10-4 05:44:10 | 只看该作者
全局:
九道 发表于 2023-10-3 14:20
作用不一样。你这个代码的bug在与这个dst在DFS完成所有neighbor遍历结束前就被有可能已经被设置为float('in ...

好像明白我的逻辑漏洞在那里啦,谢谢您的点拨!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表