文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python中最短路径问题的示例分析

2023-06-20 20:54

关注

小编给大家分享一下python中最短路径问题的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

说明

最短路径问题是图论研究中的经典算法问题,用于计算从一个顶点到另一个顶点的最短路径。

最短路径问题有几种形式:确定起点的最短路径,确定终点的最短路径,确定起点和终点的最短路径,全局最短路径问题。

路径长度是将每个顶点到相邻顶点的长度记为1,而不是指两个顶点之间的道路距离——两个顶点之间的道路距离是连接边的权利。

实例

def findMin(row):    minL = max(row)    for i in row:        if i != -1 and minL > i:            minL = i    return minLdef initRow(row, plus):    r = []    for i in row:        if i != -1:            i += plus        r.append(i)    return r def getMinLen(table, e, t):    count = len(table) - 1    startPoint = 1    #记录原点到各点最短距离 初始值为-1,即不可达    lenRecord = list((-1 for i in range(count+1)))    lenRecord[startPoint] = 0    #记录每次循环的起点    points = [startPoint]    #已得到最短距离的点    visited = set()    while len(points)>0:        #当前起点        curPoint = points.pop()        #原点到当前起点的距离        curLen = lenRecord[curPoint]        #当前起点到各点的距离        curList = initRow(table[curPoint], t)        #当前起点到各点的最短距离        curMin = findMin(curList)        visited.add(curPoint)        idx = 0        while idx<count:            idx += 1            #当前点不可达或到当前点的最短距离已计算出 则跳过            if curList[idx] == -1 or idx in visited:                continue            #记录距离当前起点最近的点作为下次外层循环的起点            if curList[idx] == curMin:                points.append(idx)            #如果从原点经当前起点curPoint到目标点idx的距离更短,则更新            if lenRecord[idx] == -1 or lenRecord[idx] > (curLen+curList[idx]):                lenRecord[idx] = curLen+curList[idx]    return lenRecord[e] def processInput():    pointCnt, roadCnt, jobCnt = (int(x) for x in raw_input().split())    table = []    for i in range(pointCnt+1):        table.append([-1] * (pointCnt+1))    for i in range(roadCnt):        (x, y, w) = (int(n) for n in raw_input().split())        if table[x][y] == -1 or table[x][y] > w:            table[x][y] = w            table[y][x] = w    res = []    for i in range(jobCnt):        e, t = (int(x) for x in raw_input().split())        res.append(getMinLen(table, e, t))    for i in res:        print(i) processInput()

看完了这篇文章,相信你对“python中最短路径问题的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯