题目描述:

自己的提交:

class Solution:
def minPushBox(self, grid: List[List[str]]) -> int:
driction = [(0,1),(0,-1),(-1,0),(1,0)]
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == "B":
box = (i,j)
if grid[i][j] == "S":
grid[i][j] = "."
start = (i,j)
if grid[i][j] == "T":
grid[i][j] = "."
target = (i,j) def dfs(start,end,visited):
visited.add(start)
if start == end:
return True
for i_,j_ in driction:
i,j = start[0] + i_,start[1] + j_
if 0<=i<len(grid) and 0<=j<len(grid[0]) and (grid[i][j] == "." /
or grid[i][j] == "B") and (i,j) not in visited and dfs((i,j),end,visited):
return True
return False
visited = set()
queue = [] queue.append((box[0],box[1],start[0],start[1]))
visited.add((box[0],box[1],start[0],start[1]))
res = -1
while queue:
tmp = []
res += 1
for i,j,x,y in queue:
if target == (i,j):
return res
if 0 <= j-1 < j+1 < len(grid[0]) and grid[i][j-1] != "#" and grid[i][j+1] != "#":
if (i,j-1,i,j) not in visited and dfs((x,y),(i,j+1),{(i,j)}):
visited.add((i,j-1,i,j))
tmp.append((i,j-1,i,j))
if (i,j+1,i,j) not in visited and dfs((x,y),(i,j-1),{(i,j)}):
visited.add((i,j+1,i,j))
tmp.append((i,j+1,i,j))
if 0 <= i-1 < i+1 < len(grid) and grid[i-1][j] != "#" and grid[i+1][j] != "#":
if (i-1,j,i,j) not in visited and dfs((x,y),(i+1,j),{(i,j)}):
visited.add((i-1,j,i,j))
tmp.append((i-1,j,i,j))
if (i+1,j,i,j) not in visited and dfs((x,y),(i-1,j),{(i,j)}):
visited.add((i+1,j,i,j))
tmp.append((i+1,j,i,j))
queue = tmp
return -1

优化:*

class Solution:
def minPushBox(self, grid: List[List[str]]) -> int:
n, m = len(grid), len(grid[0]) for i in range(n):
for j in range(m):
if grid[i][j] == 'T':
t = (i, j)
elif grid[i][j] == 'S':
s = (i, j)
elif grid[i][j] == 'B':
b = (i, j) dirs = [[1, 0], [-1, 0], [0, 1], [0, -1]]
q = [tuple(s + b)]
seen = set(q)
steps = 0
while q:
nq = []
for si, sj, bi, bj in q:
if t == (bi, bj): return steps
for di, dj in dirs:
nsi, nsj = si + di, sj + dj
if nsi == bi and nsj == bj:
nbi, nbj = bi + di, bj + dj
ds = 1
else:
nbi, nbj = bi, bj
ds = 0
if not (0 <= nsi < n and 0 <= nsj < m): continue
if not (0 <= nbi < n and 0 <= nbj < m): continue
if grid[nsi][nsj] == '#' or grid[nbi][nbj] == '#': continue
nsb = (nsi, nsj, nbi, nbj)
if nsb in seen: continue
seen.add(nsb)
if ds == 0:
q.append(nsb)
else:
nq.append(nsb)
q = nq
steps += 1
return -1

leetcode-163周赛-1263-推箱子*的更多相关文章

  1. OC推箱子

    #include<stdio.h> #include<stdlib.h> int main(void) { char sr;//存储用户输入的指令 //绘制地图 char a[ ...

  2. c语言游戏推箱子

    前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...

  3. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  4. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  5. hdu.1254.推箱子(bfs + 优先队列)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  6. [游戏模版17] Win32 推箱子 迷宫

    >_<:Here introduce a simple game: >_<:resource >_<:only can push a box and finally ...

  7. [转]Flash ActionScript2.0面向对象游戏开发-推箱子

    本文转自:http://www.alixixi.com/Dev/W3C/Flash/2007/2007070868666.html 概述: Flash ActionScript2.0是一种面向对向的编 ...

  8. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;

    网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...

  9. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  10. [HDU 1254] 推箱子

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

随机推荐

  1. .net 开源项目地址

    https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet 这个下面是asp.net core 框架 ...

  2. 常用yum源之(Percona MySQL)

    [percona]name = CentOS $releasever - Perconabaseurl=http://repo.percona.com/centos/$releasever/os/$b ...

  3. TableStore最佳实践:GEO索引打造店铺搜索系统

    摘要: 如何使用TableStore打造店铺搜索系统 一.方案背景 对于一套GEO管理系统,其核心点与瓶颈在于数据库的存储性能与查询能力:一方面,存储服务需要应对海量数据的低延迟存.读,另一方面,存储 ...

  4. Python--JavaScript的对象

    JavaScript的对象 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String.Math.Array.Date.R ...

  5. BZOJ 4545

    bzoj 4545 给定一个踹树,支持几种操作. 本质不同子串询问 加入子树 询问字符串\(S\) 在树上的出现次数. 好码好码 重点就是维护\(parent\) 树,考虑用\(LCT\)维护此树. ...

  6. cooike和session到底是个啥

    1.为什么需要cookie ?  cookie不属于http协议范围,由于http协议无法保持状态,即无状态属性.但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. co ...

  7. 20175213 2018-2019-2 《Java程序设计》第10周学习总结

    Java内存模型 主内存与工作内存 Java内存模型主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量(Variable)与Java编程中 ...

  8. Windows下 wamp下Apache配置虚拟域名

    安装好wamp后  找到 找到  Include conf/extra/httpd-vhosts.conf   去掉前面的#   并保存 修改 DocumentRoot  和  ServerName ...

  9. Java学习之面向对象---继承

    继承:子继承父,子可以拥有父的所有. 继承的好处: 1.提高了代码的复用性 2.让类与类之间产生了关系.有了这个关系,才有了多态的特性 Java 只支持单继承,不支持多继承 class A { voi ...

  10. Nginx网络架构实战学习笔记(三):nginx gzip压缩提升网站速度、expires缓存提升网站负载、反向代理实现nginx+apache动静分离、nginx实现负载均衡

    文章目录 nginx gzip压缩提升网站速度 expires缓存提升网站负载 反向代理实现nginx+apache动静分离 nginx实现负载均衡 nginx gzip压缩提升网站速度 网页内容的压 ...