当前位置: 首页 > ai >正文

华为OD-2024年E卷-小明周末爬山[200分] -- python

问题描述:

题目描述
周末小明准备去爬山锻炼,0代表平地,山的高度使用1到9来表示,小明每次爬山或下山高度只能相差k及k以内,每次只能上下左右一个方向上移动一格,小明从左上角(0,0)位置出发
输入描述
第一行输入m n k(空格分隔),代表m*n的二维山地图,k为小明每次爬山或下山高度差的最大值。
然后接下来输入山地图,一共m行n列,均以空格分隔。取值范围:0<m≤500,0<n≤500,0<k<5
输出描述
请问小明能爬到的最高峰多高,到该最高峰的最短步数,输出以空格分隔。同高度的山峰输出较短步数。如果没有可以爬的山峰,则高度和步数都返回0。
备注
所有用例输入均为正确格式,且在取值范围内,考生不需要考虑不合法的输入格式。

5 4 1
0 1 2 0
1 0 0 0
1 0 1 2
1 3 1 0
0 0 0 9
2 2

解题思路:

需要得到小明能爬到的最高峰多高,到该最高峰的最短步数。两个限制条件,一个最大值、一个最小步数,考虑bfs:

  1. arr列表,记录山地图;vis列表,记录当前位置是否访问过;ans列表,记录高度和步数
  2. q列表,加入(0,0,0)初始化,遍历四个方向
  3. 符合条件:将下一个坐标加入q,并更新下一坐标vis为1,同时将当前高度、步数加入ans列表
  4. 对ans列表按照高度降序、步数升序排列

代码实现:

#处理输入
m,n,k = map(int,input().split())
arr = []
for i in range(m):arr.append(list(map(int,input().split())))
#初始化坐标(0,0)
dir = [(1,0),(-1,0),(0,1),(0,-1)]
vis = [[0]*n for _ in range(m)]
vis[0][0] = 1
ans = []
ans.append((0,0))
q = []
q.append((0,0,0))
#遍历地图
while q:(x,y,step) = q.pop()for (i,j) in dir:dx = x+idy = y+jif 0 <= dx < m and 0 <= dy < n and not vis[dx][dy]:if abs(arr[dx][dy] - arr[x][y]) <= k:q.append((dx,dy,step+1))vis[dx][dy] = 1ans.append((arr[dx][dy],step+1))
ans.sort(key = lambda x: (-x[0],x[1]))#默认升序,'-' 代表降序
print(ans[0][0],ans[0][1],sep = ' ')

http://www.xdnf.cn/news/14377.html

相关文章:

  • 亚马逊ASIN: B0DNTQ2YNT数据深度解析报告
  • 3.创建数据库
  • STM32103CBT6显示ST7789通过SPI方式显示柬埔寨文
  • Unity Addressable使用之入门篇
  • 讲一下进程和线程
  • Day54打卡 @浙大疏锦行
  • 37-Oracle 23 ai Shrink Tablespace(一键收缩表空间)
  • Composer 的 PHP 依赖库提交教程
  • 【Qt】Qt 基础
  • Redis-CPP通用接口
  • Leetcode 3584. Maximum Product of First and Last Elements of a Subsequence
  • 139. 单词拆分
  • (LeetCode 每日一题) 1432. 改变一个整数能得到的最大差值(贪心)
  • React组件通信——context(提供者/消费者)
  • MySQL常用函数详解之字符串函数
  • nohz_full 参数对内核软硬锁检测机制的影响分析
  • 嵌入式学习笔记 - SH79F6441 堆栈栈顶可以是片上内部RAM(00H-FFH)的任意地址怎么理解
  • (91)课113:存储函数与存储过程的区别总结。
  • DP刷题练习(三)
  • Golang 解大整数乘法
  • Python Pillow 库详解文档
  • pythton 语言的独特语法
  • Axure应用交互设计:多种类型元件实现新增中继器数据
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(五)
  • Python爬虫实战:研究Mr. Queue相关技术
  • 【Java SE】类和对象(3)
  • Kafka源码P2-生产者缓冲区
  • 基于大模型预测缺铁性贫血的综合技术方案大纲
  • 记录一次 Oracle 表空间不足问题的解决过程
  • Linux进程间通信(上)