首页 > 编程语言 >【蓝桥杯选拔赛真题70】python最短路径和 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

【蓝桥杯选拔赛真题70】python最短路径和 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

时间:2024-03-19 20:59:47浏览次数:24  
标签:真题 python 距离 蓝桥 解析 节点

目录

python最短路径和

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析

七、 推荐资料

1、蓝桥杯比赛

2、考级资料

3、其它资料


python最短路径和

第十五届蓝桥杯青少年组python比赛选拔赛真题

一、题目要求

(注:input()输入函数的括号中不允许添加任何信息)

1、编程实现

        蚂蚁王国住着 N 只蚂蚁,每只蚂蚁都有自己的领地,领地之间可以直接到达或经过其他领地间接到达,可以直接到达的领地之间的道路距离都为1,但所有领地都有一条唯一的最短路径可以相互到达。

        现要在 N 块领地(依次编号为 1~N)中,选出一块领地建立游乐场,使得所有蚂蚁到游乐场的最小距离总和是 N 种情况中最小的,例如:N=8,1~8号领地之间的连接关系为:1和5、2和6、3和 6、4和 5、5和 6、4和 7、5 和 8。

如果将游乐场创建在5 号领地,最小距离总和为 10。

  • 1 号到5号距离为 1;
  • 2 号到5 号距离为 2;
  • 3 号到5 号距离为 2;
  • 4 号到5 号距离为1;
  • 6 号到5 号距离为1;
  • 7 号到 5 号距离为 2:
  • 8 号到5号距离为1。

如果将游乐场创建在 6号领地,最小距离总和为 12。

  • 1号到6号距离为2;
  • 2号到6号距离为1;
  • 3号到6号距离为1;
  • 4号到6号距离为2
  • ;5 号到6号距离为1;
  • 7 号到 6 号距离为 3;
  • 8 号到6号距离为 2。

可以发现,将游乐场创建在5 号领地,最小距离总和 10 是最小的,故输出 10。

2、输入输出

输入描述:第一行输入一个正整数 N(2≤N≤20),表示领地数量
接下来输入 N1行,每行包含两个正整数(1≤正整数≤N,两个正整数不相同),表示两块领地相互之间可以直接到达,正整数之间以一个英文逗号隔开(数据保证 N 块领地相互之间可以到达)

输出描述:只有一行,一个整数,即N 种情况中最小距离总和的最小值

输入样例:

8
1,5
2,6
3,6
4,5
5,6
4,7
5,8

输出样例:

10

二、算法分析

  1. 题目相对而言还是有一定难度的,这是比较典型的无向图最小代价问题
  2. 解决这类题目,如果小朋友们没有学过一点点算法的思路,解这道题会复杂点 
  3. 小兔子老师这里使用深度优先算法进行求解
  4. 使用递归函数进行深度优先搜索,找到从每个节点出发到其他所有节点的代价,然后选取最小值作为结果,需要逐个节点进行遍历
  5. 具体实现如下:

三、程序编写

n = int(input())
ls = []
for x in range(n-1):
    path = list(map(int,input().split(',')))
    ls.append(path)

def findNext(p):
    lst = []
    for i in range(n-1):
        if p in ls[i]:
            np = sum(ls[i])-p
            if visited[np]==False:
                lst.append(np)
    return lst  

def cost(p,cnt):
    nodes = findNext(p)
    if len(nodes)==0:
        return 0

    visited[p] = True
    res = 0
    for node in nodes:
        res = res + cost(node,cnt+1) +cnt
    return res

ans=[]
for x in range(1,n+1):
    visited = [False]*(n+1) 
    res = cost(x,1)
    ans.append(res)
print(min(ans))

四、程序说明

  • 首先输入n个节点
  • 创建一个空列表用于存储路径信息
  • 接着利用for循环结合列表和map依次输入每条路径的信息并添加到列表中
  • 定义findNext函数,用于找到与节点p相邻的节点
  • 遍历每条路径的信息 ,如果节点p在路径信息中出现,计算出相邻节点的值
  • 判断相邻节点是否访问过,没有将相邻节点的值添加到列表中
  • 定义cost函数,用于计算从节点p出发的最小代价
  • 调用函数findNext获取与节点p相邻的节点
  • 如果相邻节点列表为空就返回,表示不需要再继续访问相邻节点
  • 访问节点p,并计算出与p相邻节点的值,并返回
  • 创建一个空列表用于存储每个节点出发的最小代价
  • 遍历每个节点同时创建一个长度为n+1的未访问过的列表
  • 接着调用cost函数计算从节点x出发的最小代价
  • 将最小代价添加到列表中 ,最后输出最小代价

五、运行结果

​8
1,5
2,6
3,6
4,5
5,6
4,7
5,8

​10

六、考点分析

难度级别:难,这题相对而言还是有点难度,难在算法的设计,具体主要考查如下:

  1. 学会分析题目,找到解题思路
  2. 学会递归函数和深度搜索算法的使用和实现
  3. input函数:Python 中 input() 函数接受一个标准输入数据,返回为 string 类型。
  4. int函数:强制将传入对象转换成整数类型
  5. split函数:按照指定的分隔符进行分割
  6. map函数:将指定的对象按照指定的函数进行迭代,在这里是将时分秒字符串类型数据按int整数类型数字返回输出(相当于多个变量强制类型转化)
  7. list函数:强制将参数转化成列表对象
  8. 学会列表的相关操作:列表声明、取数、遍历等等
  9. 学会for循环的使用:for循环可以遍历任何有序的项及列表元素等等。
  10. range函数:rang(a,b),循环的时候是不包括b的,所以我们这个案例中要转变一下,要想包含b,就应该写成range(a,b+1)
  11. 学会if...条件判断语句的使用:满足条件才执行相应的程序
  12. 学会if...else双分支语句的使用:满足条件执行一种处理程序,不满足执行另一种处理程序
  13. print函数:用于打印输出,最常见的一个函数。
  14. 充分掌握for循环、列表和递归函数、深搜算法相关操作函数的使用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

七、 推荐资料

1、蓝桥杯比赛

2、考级资料

3、其它资料

标签:真题,python,距离,蓝桥,解析,节点
From: https://blog.csdn.net/frank2102/article/details/136834282

相关文章

  • Python的优点和缺点(详细解说版本)——《跟老吕学Python编程》附录资料
    Python的优点和缺点(详细解说版本)——《跟老吕学Python编程》附录资料Python的优点和缺点Python的优点Python语法简单Python是开源的程序员使用Python编写的代码是开源的。Python解释器和模块是开源的。Python是免费的Python是高级语言Python是解释型语言,能跨平......
  • Python面向对象编程之多态你学会了吗?
    在Python面向对象编程中,多态是一个非常重要的概念。多态意味着一个接口可以有多种实现方式,或者说一个接口可以被多种对象所实现。这在编程中非常重要,因为它可以帮助我们编写更加灵活和可扩展的代码。想象一下,如果你有一个函数,它需要处理不同的对象,但是这些对象都实现了同一......
  • Python面向对象编程之多继承,你真的懂了吗?
    hi,大家好!今天我们来聊聊Python面向对象编程中的一个重要概念——多继承!如果你还没搞清楚这个概念,那就赶紧跟着我一起学习吧!首先,我们来了解一下什么是继承。在面向对象编程中,继承是一个让子类可以继承父类的属性和方法的机制。这样,我们就可以避免重复编写相同的代码,并且让代......
  • python27安装pygame
    参考:https://cloud.tencent.com/developer/article/2089701我安装的是1.9.3版本https://pypi.org/project/pygame/1.9.3/#files按照自己本地的环境下载,比如我的是python27,windows64,我安装的就是 pygame-1.9.3-cp27-cp27m-win_amd64.whl安装命令:pipinstallxxxx.whl 试......
  • 蓝桥杯单片机快速开发笔记——超声波测距
    一、原理分析        超声波测距是一种常见的测距方法,其原理是利用超声波在空气中传播的速度恒定且较快的特性,通过发送超声波信号并接收回波,计算出物体与传感器之间的距离。以下是超声波测距的原理和应用:原理:发送超声波信号:超声波传感器发送一个短脉冲的超声波信......
  • Python中的深拷贝与浅拷贝有什么区别?
    在Python中,深拷贝和浅拷贝是处理复合对象(例如列表、字典等含有其他对象的对象)时常用到的两种方法。它们之间的主要区别在于复制过程中对内嵌对象的处理方式。###浅拷贝(ShallowCopy)浅拷贝创建了一个新对象,其内容是对原始对象中内容的引用。这意呀着,如果原始对象中的元......
  • 使用Python爬取豆瓣电影影评:从数据收集到情感分析
    简介在当今数字化时代,对电影的评价和反馈在很大程度上影响着人们的选择。豆瓣作为一个知名的电影评价平台,汇集了大量用户对电影的评论和评分。本文将介绍如何使用Python编写爬虫来获取豆瓣电影的影评数据,并通过情感分析对评论进行简单的情感评价。环境准备在开始之前,我们需要......
  • linux-实现日志分析--python
    linux-实现日志分析--python涉及到的主要python包和系统命令:1.datetime#用于处理时间2.subprocess#用于调用命令行工具3.tail-flogFile#获取logFile新增内容废话不多说,下面说一下场景需求和具体解决方案。1.[场景需求]一个区块链项目,在项目测试过程中,通过日志发......
  • Python教程:如何向Word中添加表格
    简介MicrosoftWord是一种流行的文档处理软件,广泛用于创建各种类型的文档,包括报告、简历、手册等。Python提供了许多库来处理MicrosoftWord文档,其中包括python-docx,它使我们能够轻松地创建、修改和操作Word文档。本文将介绍如何使用Python的python-docx库向Word文档中添加表格......
  • Python从入门到精通秘籍八
    一、Python中函数的多返回值在Python中,函数可以返回多个值。这种特性可以通过将多个变量包装在一个元组或列表中来实现。下面是一个示例代码:defmultiple_returns():a=1b=2c=3returna,b,cresult=multiple_returns()print(result)#输出:(......