Python使用广度优先搜索遍历混乱地铁问题

 更新时间:2023年04月07日 09:47:04   作者:Want595  
这篇文章主要介绍了Python使用广度优先搜索遍历混乱地铁问题,广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型,需要的朋友可以参考下

混乱地铁问题

【问题描述】

在某个城市中地铁网极度混乱。一条地铁线路上有n个地铁站,分别编号为1到n。地铁线路上的每一个站都会停靠地铁,每一个地铁站上都有一个数字m,代表从此站出发乘客必须乘坐的站数。每个地铁站都有通往两个方向的地铁。因此可以向编号大的方向前进m站,也可以向编号小的方向前进m站。但如果前进后超出了地铁站的范围,则该地铁不可被乘坐。例如编号为1的地铁上的数字为3,那么在该地铁站上车,可以向正方向坐到4号地铁站。但不能反方向坐车到-2号地铁站,因为-2号地铁站不存在。现在乘客从A号地铁站出发,想要到达B号地铁站,求他能否到达,最少要搭乘多少次地铁?

【输入形式】

  • 第一行输入地铁站的个数
  • 第二行依次输入每个地铁站的数字,以空格隔开
  • 第三行输入地铁站A和B,以空格隔开

【输出形式】

地铁站A到B最少要搭乘地铁的次数

【样例输入】

5

2 4 1 2 3

1 2 

【样例输出】

2

程序设计 

n=int(input())
lst1=[int(i) for i in range(n)]
lst2=list(map(int,input().split()))
start,end=map(int,input().split())
def BFS(lst1,lst2,start,end):      #广度优先搜索遍历
    count=0          #计算达到终点所需乘坐地铁的次数
    visited=[0 for i in range(n)]    #设置标志列表
    Queue=[]         #设置队列,用于广度优先搜索遍历
    Queue.append(start-1)   #将起点放入队列
    flag=1           #用于改变方向
    while Queue:    #开始循环遍历
        t=Queue.pop(0)   #出队
        for i in range(2):    #分别向左右两个方向走
            flag=-1*flag    #改变方向       
            new=lst1[t]+flag*lst2[t]    #到达的新的地铁站的下标
            if new<0 or new>=n:      #检查是否合法
                continue 
            if new>=0 or new<n:
                Queue.append(new)     #若合法,就放入队列中
                visited[new]=1        #标记一下
                count+=1              #乘坐的地铁次数
                if visited[end-1]==1:   #如果终点被标记了,说明已经到终点了
                    return count
    return 0
print(BFS(lst1,lst2,start,end)) 

总结 

广度优先搜索遍历主要通过一个队列来实现,具体的格式为:

Queen.append()

while Queen:

    t=Queen.pop() 

    if ……

        Queen.append()

先将第一个元素放入队列中,然后将第一个元素取出,并找到合法的所有元素放入队列中,再挨个从队列中取出,直到队列为空,表示所有合法的元素都已经被遍历过了。

到此这篇关于Python使用广度优先搜索遍历混乱地铁问题的文章就介绍到这了,更多相关Python广度优先搜索遍历混乱地铁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 没有main函数的原因

    Python 没有main函数的原因

    这篇文章主要介绍了Python 没有main函数的原因,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Python提取特定时间段内数据的方法实例

    Python提取特定时间段内数据的方法实例

    今天小编就为大家分享一篇关于Python提取特定时间段内数据的方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Python使用pathlib库实现优雅的处理路径

    Python使用pathlib库实现优雅的处理路径

    如果你需要在 Python 里进行文件处理,那么标准库中的os和os.path兄弟俩一定是你无法避开的两个模块,本文主要来和大家聊聊如何使用pathlib库实现优雅的处理路径,感兴趣的可以了解下
    2023-12-12
  • Ubuntu22.04安装PyTorch1.12.1 GPU版本全过程

    Ubuntu22.04安装PyTorch1.12.1 GPU版本全过程

    这篇文章主要介绍了Ubuntu22.04安装PyTorch1.12.1 GPU版本全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • pytorch tensorboard可视化的使用详解

    pytorch tensorboard可视化的使用详解

    tensorboard是tensorflow用来可视化训练和测试过程的模块,而pytorch并没有可视化模块,但是pytoch=1.2.0版本以上开始支持tensorboard
    2022-10-10
  • Python+AutoIt实现界面工具开发过程详解

    Python+AutoIt实现界面工具开发过程详解

    这篇文章主要介绍了Python+AutoIt实现界面工具开发过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • pytorch动态神经网络(拟合)实现

    pytorch动态神经网络(拟合)实现

    这篇文章主要介绍了pytorch动态神经网络(拟合)实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 如何在Python中将字符串转换为数组详解

    如何在Python中将字符串转换为数组详解

    最近在用Python,做一个小脚本,有个操作就是要把内容换成数组对象再进行相关操作,下面这篇文章主要给大家介绍了关于如何在Python中将字符串转换为数组的相关资料,需要的朋友可以参考下
    2022-12-12
  • python将一个英文语句以单词为单位逆序排放的方法

    python将一个英文语句以单词为单位逆序排放的方法

    今天小编就为大家分享一篇python将一个英文语句以单词为单位逆序排放的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能

    Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能

    这篇文章主要介绍了Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论