刷题记录-2最短路径

news2024/10/6 10:33:51

考点: 图论-最短路-Dijkstra
在这里插入图片描述
在这里插入图片描述
解题:
c++

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3fLL;
const int num = 3e5+2;
struct edge
{
    int from,to;
    long long w;
    edge(int a,int b,long long c)
    {
        from = a;
        to = b;
        w = c;
    }
};


vector<edge> e[num];

struct s_node
{
    int id;
    long long n_dis;
    s_node(int b,long long c)
    {
        id = b;
        n_dis = c;
    }
    bool operator < (const s_node a) const
    {
        return n_dis > a.n_dis;
    }
};

int n,m;
long long dis[num];

void dijstra()
{
    int s = 1;
    bool done[num];
    for(int i = 1;i <= n;i++)
    {
        dis[i] = inf;
        done[i] = false;
    }
    dis[s] = 0;
    priority_queue <s_node> Q;
    Q.push(s_node(s,dis[s]));
    while(!Q.empty())
    {
        s_node u = Q.top();
        Q.pop();
        if(done[u.id]) continue;
        done[u.id] = true;
        
        for(int i = 0;i < e[u.id].size();i++)
        {
            edge y = e[u.id][i];
            if(done[y.to]) continue;
            if(dis[y.to] > y.w +u.n_dis)
            {
                dis[y.to] = y.w + u.n_dis;
                Q.push(s_node(y.to,dis[y.to]));
            }
        }
    }
}


int main()
{
    cin >> n >> m;
    for(int i = 1;i <= n;i++) e[i].clear();
    while(m--)
    {
        int u,v,w;
        cin >> u >> v >> w;
        e[u].push_back(edge(u,v,w));
    }
    
    dijstra();
    
    for(int i = 1;i <= n;i++)
    {
        if(dis[i] >= inf) cout << "-1" << " ";
        else cout << dis[i] << " ";
    }
    
    return 0;
}

python

import heapq
import sys
n,m=map(int,input().split())
distance=[[] for i in range(n+1)]
for i in range(m):
  u,v,w=map(int,input().split())
  distance[u].append((v,w))
dp=[sys.maxsize]*(n+1)
q=[]
heapq.heappush(q,(0,1))
dp[1]=0
def dijkstra():
  visit=[0 for i in range(n+1)]
  while q:
    v=heapq.heappop(q)[1]
    if visit[v]==1:
      continue
    visit[v]=1
    for a,b in distance[v]:
      if visit[a]==1:
        continue
      dp[a]=min(dp[a],dp[v]+b)
      heapq.heappush(q,(dp[a],a))
dijkstra()
print(0,end=" ")
for i in range(2,n+1):
  if dp[i]==sys.maxsize:
    print(-1,end=" ")
  else:
    print(dp[i],end=" ")

看了一下别的大佬的解题思路,很厉害的

# 请在此输入您的代码
import math
import heapq


def djs(s):
    done = [0 for _ in range(n + 1)]  # bool矩阵
    hp = []
    dis[s] = 0
    heapq.heappush(hp, (0, s))  
    while hp:
        t = heapq.heappop(hp)[1]  # 取出该节点
        if done[t]:
            continue
        done[t] = 1
        for i in range(len(g[t])):  # 找t的邻居节点和距离
            v, w = g[t][i]
            if done[v]:
                continue
            if dis[v] > dis[t] + w:
                dis[v] = dis[t] + w
                heapq.heappush(hp, (dis[v], v))


n, m = map(int, input().split())
g = [[] for _ in range(n + 1)]  # 用邻接表来储存图
dis = [math.inf] * (n + 1)  
for i in range(m):
    u, v, w = map(int, input().split())
    g[u].append((v, w))  # 用邻接表来储存图
djs(1)
for i in range(1, n+1):
    if dis[i] >= math.inf:
        print(-1, end=' ')
    else:
        print(dis[i], end=' ')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/777406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法竞赛入门【码蹄集新手村600题】(MT1001-1020)

算法竞赛入门【码蹄集新手村600题】(MT1001-1020&#xff09; 目录MT1001 程序设计入门MT1002 输入和输出整型数据MT1003 整数运算MT1004 求余MT1005 输入和输出实型数据MT1006 实型数运算MT1007 平均分MT1008 圆球等的相关运算MT1009 公式计算MT1010 输入和输出字符型数据MT10…

【Visual Studio】Qt 在其他 cpp 文件中调用操作 ui 界面控件

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 还整了一个如何相互之间调用函数的文章&#xff0c;感兴趣可以看&#xff1a;【Visual Studio】Qt 在其他 cpp 文件中调用主工程下文件中的函数。 文章目录 …

第四章:包围体

第四章&#xff1a;包围体 引言-包围体&#xff08;1&#xff09;包围体测试和几何体测试&#xff08;2&#xff09;包围体测试的代价和作用&#xff08;3&#xff09;相交测试的优化&#xff08;4&#xff09;包围体相关章节和主旨 一、BV 期望特征1.1 有效的包围体1.2 包围体…

docker 网络配置详解

目录 1、docker网络模式 2、容器和容器之间是如何互通 3、容器之间互通 --link 3、自定义网络 4、不通网段的容器进行网络互通 1、docker网络模式 docker 网络模式采用的是桥接模式&#xff0c;当我们创建了一个容器后docker网络就会帮我们创建一个虚拟网卡&#xff0c;这…

Electron 学习_在进程之间通信

1.问题&#xff1a;Electron的主进程和渲染进程有着清楚的分工&#xff0c;并且不可互换。从渲染进程直接访问Node.js 接口&#xff0c;亦或者 从主进程访问HTML文档对象模型(DOM)都是不可能的 2.解决方法&#xff1a;使用进程间通信 (IPC) 可以使用 Electron 的ipcMain 模块和…

Redisson限流器RRateLimiter使用及源码分析

一、使用 使用很简单、如下 // 1、 声明一个限流器 RRateLimiter rateLimiter redissonClient.getRateLimiter(key);// 2、 设置速率&#xff0c;5秒中产生3个令牌 rateLimiter.trySetRate(RateType.OVERALL, 3, 5, RateIntervalUnit.SECONDS);// 3、试图获取一个令牌&#…

TCP首部格式【TCP原理(笔记五)】

文章目录 TCP首部格式源端口号&#xff08;Source Port&#xff09;目标端口号&#xff08;Destination Port&#xff09;序列号&#xff08;Sequence Number&#xff09;确认应答号&#xff08;Acknowledgement Number&#xff09;数据偏移&#xff08;Data Offset&#xff09…

Oracle 普通视图 (Oracle Standard Views)

视图&#xff08;views&#xff09;是一种基于表的"逻辑抽象"对象&#xff0c;由于它是从表衍生出来的&#xff0c;因此和表有许多相同点&#xff0c;我们可以和对待表一样对其进行查询/更新操作。但视图本身并不存储数据&#xff0c;也不分配存储空间。 本文只讨论普…

Linux下搭建pyqt5开发环境—基于Pycharm

防踩坑Tips&#xff1a; 1、不能学windows那样直接用pip安装PyQt5Designer和pyqt5-tools。这两个模块最根本的是用的windows的程序&#xff0c;linux上是运行不了的&#xff0c;特别是PyQt5Designer&#xff0c;会提示安装失败。 2、推荐在python环境安装同系统版本一致的pyq…

2023.7.16 第五十九次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

数据分析系统中的六边形战士——奥威BI系统

数据分析软件可以对收集的数据进行分析和报告&#xff0c;帮助企业获得更深入的数据洞察力&#xff0c;从而推动企业数字化运营决策&#xff0c;提高决策效率与质量。进入大数据时代&#xff0c;企业对数据分析软件的要求也在水涨船高&#xff0c;传统的数据分析软件显然已不能…

数据结构 单向链表(不循环)的基础知识和基础操作

头定义&#xff1a; typedef int datatype; typedef struct Node {//数据域存储数据datatype data;//指针域存储下一个地址struct Node *next; }*Linkelist; 创建节点 Linkelist create_node()//创建新节点 {Linkelist node(Linkelist)malloc(sizeof(struct Node));if(nodeN…

Elasticsearch 源码探究 001——故障探测和恢复机制

1、Elasticsearch 故障探测及熔断背景 探究Elasticsearch7.10.2 节点之间的故障探测以及熔断故障是怎么做的&#xff0c;思考生产上的最佳实践。 服务端故障场景&#xff1a; 单个master挂掉 除了断点断网&#xff0c;状态同步异常&#xff0c;主master也会认为自己已经失败&am…

ASPICE V模型之软件需求

ASPICE V模型之软件需求 了解ASPICE认识软件需求软件需求分解软件需求工作流程 了解ASPICE ASPICE全称是“Automotive Software Process Improvement and Capacity Determination”汽车软件过程改进及能力评定&#xff0c;是汽车行业用于评价软件开发团队的研发能力水平的模型框…

全球生成式AI大竞赛,Llama 2大模型现已可在亚马逊云科技上使用

一直以来Llama可以说是AI社区内最强大的开源大模型。但因为开源协议问题&#xff0c;一直不可免费商用。7月19日&#xff0c;Meta发布了大家期待已久的免费可商用版本Llama 2。一夜之间&#xff0c;大模型格局再次发生巨变。 作为Meta宣布的首批合作伙伴之一&#xff0c;现亚…

Ubuntu 安装Postgresql与PostGIS

1.前言 最近在做GIS分析&#xff0c;采集设备的经纬度点判断是否进出围栏以及是否产生道路偏移报警&#xff0c;在之前的文章有介绍过Windows下使用C#来实现&#xff0c;参考文章&#xff1a;利用PostgresqlPostgis进行空间地理信息分析&#xff08;道路偏移&#xff0c;进出电…

sql注入---报错注入

updatexml&#xff08;&#xff09;&#xff1a;对XML文档数据进行查询和修改 extractvalue&#xff08;&#xff09;&#xff1a;对XML文档数据进行查询 floor&#xff08;&#xff09;&#xff1a;取整的函数 前提是未关闭数据库报错函数&#xff0c;对于一些SQL语句的错误…

Java反射、动态代理

文章目录 反射什么是动态代理&#xff1f;程序为什么需要代理?代理长什么样? 反射 java反射机制原理&#xff1a;我们写的源代码是.java文件&#xff0c;通过javac编译后成为.class文件&#xff0c;即字节码文件&#xff0c;程序执行时&#xff0c;JVM会类加载字节码文件到内…

浅谈单片机

目录 1.什么是单片机 2.单片机的作用&#xff1f; 3.单片机的种类 4.如何学好单片机 5. 单片机的就业前景 1.什么是单片机 单片机&#xff08;Microcontroller Unit&#xff0c;简称MCU&#xff09;是一种集成了微处理器核心、存储器、输入输出端口和各种外围功能模块于一体…

Rspack 学习了解

一、简介 Rspack GitHub 仓库、Rspack Quick start。 Rspack 是由字节 ByteDance Web Infra 团队基于 Rust 语言开发的 Web 高性能构建工具。 Rust 是种高效、可靠的通用高级语言。其高效不仅限于开发效率&#xff0c;执行效率也是令人称赞的&#xff0c;属于少有兼顾开发效率…