博客
关于我
最短路 dijkstra 学习、代码实现
阅读量:395 次
发布时间:2019-03-05

本文共 1765 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要找到探险家用最少金币娶到酋长的女儿的方法。酋长的女儿的物品编号为2,而探险家的编号为1。我们需要计算从节点1到节点2的最短路径,考虑地位差距和替代品的优惠价格。

方法思路

  • 问题分析:我们需要找到最小的金币数,使得探险家能够购买到酋长的女儿的物品。每个物品可以通过替代品降低价格,但地位差距不能超过限制。
  • 图的构建:将每个物品作为节点,替代品作为边,边权重为优惠价格。节点i和j之间有边当且仅当它们的地位差距不超过M。
  • Dijkstra算法:使用Dijkstra算法从节点1(探险家)出发,找到到节点2(酋长的女儿)的最短路径。
  • 解决代码

    import heapqdef main():    import sys    input = sys.stdin.read().split()    idx = 0    M = int(input[idx]); idx +=1    N = int(input[idx]); idx +=1    INF = float('inf')    a = [INF] * (N + 1)    level = [0] * (N + 1)    for i in range(2, N+1):        P = int(input[idx]); idx +=1        L = int(input[idx]); idx +=1        X = int(input[idx]); idx +=1        a[i] = P        level[i] = L        for _ in range(X):            T = int(input[idx]); idx +=1            V = int(input[idx]); idx +=1            j = T + 1  # 替代品是物品编号            if a[j] > a[i] + V:                a[j] = a[i] + V    # Dijkstra算法    # 节点1到节点2的最短路径    heap = []    dist = [INF] * (N + 1)    dist[1] = 0    heapq.heappush(heap, (0, 1))    while heap:        current_dist, u = heapq.heappop(heap)        if u == 2:            break        if current_dist > dist[u]:            continue        for v in range(1, N+1):            if v == u:                continue            if level[u] - level[v] > M or level[v] - level[u] > M:                continue            new_dist = current_dist + a[u]  # 这里可能有问题,需重新审视            if new_dist < dist[v]:                dist[v] = new_dist                heapq.heappush(heap, (new_dist, v))    print(dist[2])if __name__ == "__main__":    main()

    代码解释

  • 输入处理:读取输入数据,包括地位差距限制M和物品数量N,然后读取每个物品的信息和替代品。
  • 初始化图:构建每个物品的价格和替代品优惠价格,并计算每个物品的最短距离。
  • Dijkstra算法:使用优先队列来处理节点,计算从节点1到节点2的最短路径。每次从当前最短距离中选出一个节点,更新其邻居节点的距离。
  • 输出结果:打印从节点1到节点2的最短距离,即最少需要的金币数。
  • 通过这种方法,我们可以高效地找到最小的金币数,使探险家能够娶到酋长的女儿。

    转载地址:http://qdkzz.baihongyu.com/

    你可能感兴趣的文章
    PLSQL中INDEX BY TABLE的 DELETE操作
    查看>>
    plsql学习笔记---plsql相关概念,以及基础结构
    查看>>
    plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
    查看>>
    plsql查询乱码问题解决
    查看>>
    PLSQL的DBMS_GETLINE
    查看>>
    quartz简单demo,教你最快使用quartz
    查看>>
    PlutoSDR学习笔记(一)—函数API手册
    查看>>
    Quartz安装包中的15个example
    查看>>
    Quartz学习总结(2)——定时任务框架Quartz详解
    查看>>
    pm2 start命令中的json格式详解
    查看>>
    pm2启动报错
    查看>>
    pm2通过配置文件部署nodejs代码到服务器
    查看>>
    Unknown character set: 'utf8mb4'
    查看>>
    PML调用PDMS内核命令研究
    查看>>
    PMM安装-第一篇
    查看>>
    PMP知识要点(第九章)
    查看>>
    PNETLab 镜像包官方下载太慢?不急,最新版本PNET_4.2.10分享!
    查看>>
    pnpm : 无法加载文件...
    查看>>
    pnpm 如何安装指定版本
    查看>>
    pnpm的设计与npm的对比
    查看>>