ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

力扣1036.逃离大迷宫(Python题解)

2022-01-11 19:59:10  阅读:194  来源: 互联网

标签:封锁 bfs Python 题解 List 力扣 num path blocked


题目网址:

https://leetcode-cn.com/problems/escape-a-large-maze/submissions/

题目解析:

迷宫题目应该利用bfs进行解答,但是这道题目需要一点优化,给出的迷宫最大可到[1e6, 1e6], 数目庞大,如果直接进行遍历那么肯定会超时,但是我们可以巧妙地利用这个障碍,如果没有完全封锁的话,意味着我们可以走出去,但是封锁的话能达到什么地步呐?最大只能由200个坐标被封锁,最大化的话,就是说封锁一个角落最大值为n*(n-1)//2,n是封锁的坐标,所以容我们走的步数大于这个,那么一定可以走出去。所以答案就出来了。

代码如下

class Solution:
    def isEscapePossible(self, blocked: List[List[int]], source: List[int], target: List[int]) -> bool:
        MAXINT = 1e6
        blocked_maze, MAX = {tuple(p) for p in blocked}, len(blocked)*(len(blocked)-1)//2

        def bfs(start, end):
            path, num, visit = [start], 0, {tuple(start)}

            while num < len(path):
                for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
                    x1, y1 = path[num][0] + dx, path[num][1] + dy
                    if 0<=x1<MAXINT and 0<=y1<MAXINT and (x1, y1) not in visit and (x1, y1) not in blocked_maze:
                        if [x1, y1] == end:
                            return True
                        path.append((x1, y1))
                        visit.add((x1, y1))
                if len(path) > MAX:
                    return True
                num += 1
            return False

        return bfs(source, target) and bfs(target, source)

标签:封锁,bfs,Python,题解,List,力扣,num,path,blocked
来源: https://blog.csdn.net/qq_51718832/article/details/122440105

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有