【python算法】最短路径算法之dirjkstra单源最短路径模板

简介: 【python算法】最短路径算法之dirjkstra单源最短路径模板

学习导图:


1dc618a0ed9580ce8bfa6facb208c08f.png

【模板】单源最短路径


亲,题目链接请戳这里


题目描述


       给定一个n个点,m条有向边的带非负权图,请你计算从s出发,到每个点的距离。


数据保证你能从s出发到任意点。


输入格式


       第一行为三个正整数n, m,s。第二行起m行,每行三个非负整数uL;, u;, u;,表示从u;到v;有一条权值为w;的有向边。


输出格式


输出一行n个空格分隔的非负整数,表示s到每个点的距离。

1dc618a0ed9580ce8bfa6facb208c08f.png5d4c6812c8535adbb050f4ddf2e1bce8.png


参考题解


import heapq
from collections import defaultdict
# 核心代码
def dirjkstra():
    # 各节点到start的最短距离
    dirs = [float('inf')] * (n + 1)
    dirs[start] = 0
    # 已用节点,比set还快20% 所有没有释放False
    seen = [False] * (n + 1)
    pq = []
    heapq.heappush(pq, (0, start))
    # BFS
    while pq:
        # 获取
        _, u = heapq.heappop(pq)
        # 该节点是否用过
        if seen[u]:
            continue
        else:
            seen[u] = True
        # 找到邻接节点
        nodeList = graph[u]
        for v, w in nodeList:
            t = dirs[u] + w
            if t < dirs[v]:
                dirs[v] = t
                # 如果该邻接节点没有访问过才把该最短边加进去
                if not seen[v]:
                    heapq.heappush(pq, (t, v))
    if dirs[-1] == float('inf'):
        return -1
    else:
        return dirs[-1]
# 输入
n, m = map(int, input().split())
# 初始化
start = 1
# 建图
graph = defaultdict(list)
for _ in range(m):
    u, v, w = map(int, input().split())
    graph[u].append((v,w))
answer = dirjkstra()
print(answer)


【蓝桥真题】单源最短路径


试题:路径


本体总分:10分


【问题描述】        


       小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。


       小蓝的图由 2021个结点组成,依次编号1至2021。


       对于两个不同的结点a, b,如果a和b的差的绝对值大于21,则两个结点之间没有边相连;如果a和b的差的绝对值小于等于21,则两个点之间有一条长度为a和 b的最小公倍数的无向边相连。


       例如:结点1和结点23之间没有边相连;结点3和结点24之间有一条无向边,长度为24;结点15和结点25之间有一条无向边,长度为75。


       请计算,结点1和结点2021之间惘最短路径长度是多少?


       提示:建议使用计算机编程解决问题。


参考题解:(答案:10266837)


import heapq
from collections import defaultdict
def gcd(a, b):
    if a < b:
        a, b = b, a
    if a % b == 0:
        return b
    else :
        return gcd(b, a%b)
def lcm(a, b):
    return int(a * b / gcd(a, b))
相关文章
|
2天前
|
算法 数据可视化 Python
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
12 6
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
30 12
|
8天前
|
算法 数据可视化 Python
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
12 0
|
8天前
|
数据可视化 算法 数据挖掘
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
|
9天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
14 0
|
9天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
19 0
|
9天前
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】
|
10天前
|
算法 定位技术 Windows
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
15 4
|
10天前
|
缓存 算法 Python
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
python算法对音频信号处理Sonification :Gauss-Seidel迭代算法
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。