蓝桥杯 python 走迷宫 BFS
蓝桥杯 python 走迷宫 BFS
题目描述
给定一个 N × × × M 的网格迷宫 G。GG的每个格子要么是道路,要么是障碍物(道路用 1 表示,障碍物用 0 表示)。
已知迷宫的入口位置为 ( x 1 x_1 x1 , y 1 y_1 y1),出口位置为 ( x 2 x_2 x2, y 2 y_2 y2)。问从入口走到出口,最少要走多少个格子。
输入描述
输入第 11 行包含两个正整数 N,M,分别表示迷宫的大小。
接下来输入一个 N × × ×M 的矩阵。若 G i , j G_{i,j} Gi,j=1 表示其为道路,否则表示其为障碍物。
最后一行输入四个整数 x 1 x_1 x1, y 1 y_1 y1, x 2 x_2 x2, y 2 y_2 y2,表示入口的位置和出口的位置。
输出描述
输出仅一行,包含一个整数表示答案。
若无法从入口到出口,则输出 -1−1。
输入输出样例
示例 1
输入
5 5
1 0 1 1 0
1 1 0 1 1
0 1 0 1 1
1 1 1 1 1
1 0 0 0 1
1 1 5 5
8
vis = [[0] * m ] * n
表示
列表*n,所有列表共享地址,这样的话vis矩阵永远改的是第一个。
from collections import deque
n, m = map(int,input().split())
g = [list(map(int,input().split())) for i in range(n)]
d = [(1,0),(-1,0),(0,1),(0,-1)]vis = [[0 for i in range(m)] for j in range(n)] # 动态生成
# vis = [[0] * m ] * n # vis不能这样生成
x1, y1 , x2, y2 = map(int,input().split())q = deque()def bfs(x,y):q.append([x,y])# 标记为非0 表示访问过 并且作为累加步数 后面要减一vis[x][y] =1while q: # 当队列不空now = q.popleft() # 出队nx = now[0] # now_xny = now[1] # now_yif nx == x2-1 and ny == y2-1: # 到终点breakfor i in d: # 向4个方向搜索dx = nx+i[0]dy = ny+i[1]if 0 <= dx < n and 0 <= dy < m:# 0 未访问过 并且不是障碍物if vis[dx][dy] == 0 and g[dx][dy] == 1:q.append([dx,dy]) # 入队# 累加 之前的点加上1 非0 表示访问过vis[dx][dy] = vis[nx][ny] + 1return vis[x2-1][y2-1]
# 后面要减一 因为起始点为1累加的
print(bfs(x1-1,y1-1)-1)
蓝桥杯 python 走迷宫 BFS相关推荐
- [蓝桥杯2019初赛]迷宫-bfs+存储路径
题目描述 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能 ...
- adv147(蓝桥杯) 学霸的迷宫 bfs
问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
- java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)
这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔者综合了各路大神神乎其技的思想,总结出 ...
- 蓝桥杯Python初级组测试题之Turtle画图2
蓝桥杯Python初级组测试题之Turtle画图2 1. 画8个内接正五边形 题目描述 解题思路 (1) 共有n=8个正五边形,因而有8次循环,每次旋转角度增加ang=360/n (2) 画内接正五边 ...
- 蓝桥杯python组一个星期备战记录贴
蓝桥杯python组一个星期备赛记录贴 文章目录 前言 注意事项: 一.贪心算法 二.最小生成树之Prim算法 三.动态规划 四.递归算法 五.树与堆 前言 目前是2021年4月11日,一位pytho ...
- 2022年蓝桥杯Python程序设计B组思路和代码分享
2022年蓝桥杯Python程序设计B组比赛结束了,分享一下题目以及思路. 文章目录 A:排列字母 题目: 思路: 代码: B: 寻找整数 题目: 思路: 代码: C: 纸张尺寸 题目: 思路: 代码 ...
- 蓝桥杯Python初级组测试题之Turtle画图
蓝桥杯Python初级测试题之Turtle画图 写这个主要是为了辅助和讲解过蓝桥杯的初级测试,难度并不高,重点在于解析过程. 画圆形和以及菱形阵列 思路: 第1步: 设置整体参数,如循环画菱形的次数为 ...
- 2021-04-24 蓝桥杯 Python 第五题--密室逃脱
Python 2021-04-24 蓝桥杯 第五题解题思路 密室逃脱 提示信息: 游戏规则: 编程实现: 输入描述 输出描述 解题思路 解法一 解法二 解法三 2021-04-24 蓝桥杯Python ...
- 第十三届蓝桥杯Python 大学B组真题详解
第十三届蓝桥杯Python B组真题详解 试题A 排列字母 试题B 寻找整数 试题C 纸张尺寸 试题D 位数排序 试题E 蜂巢 试题F 消除游戏 试题G 全排列的价值 试题H 技能升级 试题I 最长不 ...
最新文章
- MDX Step by Step 读书笔记(五) - Working with Expressions (MDX 表达式)
- 自己珍藏一些有趣的Python子程序
- 2021年春季学期-信号与系统-第十一次作业参考答案-第一小题
- 小学生们在B站讲算法,网友:我只会阿巴阿巴
- 成功解决 threading Exception unhandled RuntimeError
- 使用Opencv构建一个简单的图像相似检测器(MSE、SSIM)
- PHP中 base64_decode与base64_encode加密解密函数
- 【Tools】Visual Studio 2010下载和安装
- explain 之 type
- asp.net core自定义依赖注入容器,替换自带容器
- bigint hive java类型_详解Apache Hudi如何配置各种类型分区
- 基于JAVA+Servlet+JSP+MYSQL的失物招领系统
- queue emplace_c++ queue、deque、priority_queue/队列最大值/滑动窗口/top K
- android listview边框颜色,Android实现带有边框的ListView和item的方法
- Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(一) 理论篇
- sqlite的数据库文件在什么地方? sqlite数据库文件后缀名,提取方法,打开方法。
- access 的几种更新语句:update where 与 update join where
- 什么是爬虫?你了解吗,能干什么,怎么用,让你了解本质
- unity 烘焙模式——baked indirect/shadow mask/distance shadowmask/subtractive模式的区别
- 分布式系统技术难题--异地多活