题目来源:

P1553 - [蓝桥杯2021初赛] 路径 - New Online Judge (ecustacm.cn)

经过两天的学习总算搞定了python的Dij算法,不得不说python的库函数太强大了,还有最小堆。

先简单介绍一下python里面的heapq库函数

可以参考:(79条消息) python-堆_python 堆_QFIUNE的博客-CSDN博客

首先是引入库函数

import heapq

主要的类方法有:

heap = []
heapq.heappush(heap,item)
heapq.heappop(heap)
heapq.heapify(heap)

heapq.heappush为向堆加入一个对象

heapq.heappop为堆推出一个对象

heapq/heapify为建立最小堆

有了上述工具就可以完成距离矩阵的Dij最小堆算法了

import heapq
max_dis = 9999999999 # 根据题目意思取一个最大值作为断路
def Dij(dis:list[list[int]],start:int)->list:res = [max_dis] * len(dis)visit = [0] * len(dis) # 是否访问记录数组res[start] = 0visit[start] = 1heap = []for pivot,d in enumerate(dis[start]): # 利用枚举if d != max_dis:res[pivot] = dheapq.heappush(heap,(d,pivot)) # 初步更新reswhile heap:pre_d,pre_pivot = heapq.heappop(heap)if visit[pre_pivot]:continuevisit[pre_pivot] = 1for pivot,d in enumerate(dis[pre_pivot]):if res[pivot]>pre_d+d: # 松弛res[pivot] = res[pre_pivot]+dheapq.heappush(heap,(res[pivot],pivot))return res

剩下的工作就是按照题目要求,把距离矩阵搞出来就好了

时间复杂度O(nlogn),对于题目的2021*2021的数据量,简简单单的。

余下代码:

def f(x,y):if x==y:#当到自身是路径为0return 0x,y = max(x,y),min(x,y)add = xwhile True:if x%y==0:return xelse:x += addarr = []
for i in range(1,2022):tem = []if i<=22:for j in range(1,i+22):tem.append(f(j,i))tem = tem + [9999999999]*(2021-len(tem))elif i>=2000:for j in range(i-21,2022):tem.append(f(j,i))tem = [9999999999]*(2021-len(tem)) + temelse:for j in range(i-21,i+22):tem.append(f(j,i))tem = [9999999999]*(i-22) + tem + [9999999999]*(2021-i-21)arr.append(tem)
print("over!arr")
print(len(arr))
res = Dij(arr,0)
print(res[2020])

搞定!!

答案为:

10266837

【蓝桥杯 路径 python】Dij算法相关推荐

  1. 【预览】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 完整版链接 文章目录 [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分算法求分界值 2 双指针算法 2.1 求最长的不包 ...

  2. 【完整版】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    蓝桥杯竞赛python算法笔记 代码模板|吐血总结 文章目录 蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分 1.1 二分求最大满足(check红色条件) 1.2 二分求最小满足(che ...

  3. 关于python的比赛_【蓝桥杯】——python集团的比赛技巧,Python,组

    [蓝桥杯]-- Python组比赛技巧 蓝桥杯是大学生IT学科赛事,由工业和信息化部人才交流中心主办,所以对于大学生还说还是非常值得去参加的,2020年第十一届蓝桥杯新增了大学Python组,不分组别 ...

  4. 蓝桥杯练习系统习题-算法提高1

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法提高1 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  5. 蓝桥杯练习系统习题-算法训练2

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练2 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  6. 蓝桥杯练习系统习题-算法训练1

    蓝桥杯练习系统习题-算法训练1 题目搜索方式:Ctrl+F--> 输入题目名称->定位到解答. 入门训练(详见 算法-蓝桥杯习题(1-1)) 基础练习(详见 算法-蓝桥杯习题(2-1)) ...

  7. 蓝桥杯练习系统习题-算法提高2

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法提高2 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  8. 蓝桥杯练习系统习题-算法训练6

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练6 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  9. 蓝桥杯练习系统习题-算法训练5

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练5 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

最新文章

  1. Unity(1)控制反转
  2. mysql 5.7 解决 set global slow_query_log=on;报错
  3. dfs题目这样去接题,秒杀leetcode题目
  4. 要学好 C 语言 / C++ ,Makefile 可少不了
  5. Spark MaprLab-Auction Data分析
  6. 大数据学情分析_大数据时代如何轻松做好学情分析
  7. SharePoint Web Service系列: Add或Update其他各种类型的项
  8. Android学习路线图
  9. 标准误计算机excel公式,excel标准误差怎么算
  10. linux系统下UTF-8转GBK编码,使用汉字字库在LCD显示汉字
  11. 软件产品测试报告模板
  12. java 验证码识别_【Java】验证码识别解决方案
  13. 风格迁移应用_图像风格迁移
  14. 18款口碑爆棚手机浏览器,被一网打尽了
  15. 工业以太网串口网关ENB-301MT
  16. wifi路由器如何连接无线网络连接服务器,wifi路由器的使用方法 | 192路由网
  17. 【Mac网络错误】-只能登陆微信,无法访问网页
  18. web常用模块的测试用例
  19. 海尔微型计算机硬盘如何拆卸,海尔xqb507288拆解图
  20. (四)activiti的几个核心类

热门文章

  1. Mysql中的读写锁,表锁和行锁,间隙锁
  2. exec族函数详解(execl, execlp, execle, execv, execvp, execvpe )
  3. C语言之链表:单向链表,循环链表,双向链表
  4. (四)GNSS定位中的距离测量(模糊度固定LAMBDA算法)
  5. Ajax请求session超时解决办法
  6. sublime php 代码校验,Sublime Text下配置SublimeLinter进行PHP代码检查
  7. 易语言如何调用c dll文件,易语言调用C++写的DLL
  8. MFC ShowWindow参数
  9. 第三方浏览器内核嵌入一、Crosswalk
  10. 【Tushare 大数据社区——解救你的财经数据需求】