考研算法复试刷题第20天:Dijkstra求最短路 【有向图的最短路径问题】

news2024/12/24 2:18:43

Dijkstra求最短路

我们先来说说这道算法的过程:

和上道题不同的是我们这次是求一个有向图到最终节点的最短距离,所以其策略也有所不同。我们先手动模拟一下过程吧假如有4个点,有他们之间有五条边,那么我们如何来求其1到4的最短路径呢?

1.首先看下图,我们有1到4 4个节点 其中五条边在右边

 

 2.先从1开始初始化,从1出发的有两条变,最短路径图就变成这样了

3.然后因为离3近,所以跳到3开始初始化最短路径图。然后我们发现已经有一条通往4的路了,但是不一定是最好的所以我们需要继续遍历 

4.然后继续遍历我们发现上面那一条就是最短的。

 当遍历到2的时候,我们发现多了两条可以达到4的边,但是其距离都比原先那条远,所以最终还是走那一条就行了。

 题目解题思路

就是模拟上面的过程

1.找到现在离此时的出发点最近的点

    int t = -1;
        //遍历每个节点
        //用vis来控制是否初始化过这个节点
        for(int j=1;j<=n;j++){
            if(!vis[j]&&(t==-1||dist[t]>dist[j])){
                t = j;
            }
        }
        vis[t] = true;

2.然后开始遍历它旁边的节点,更新其他节点到其的距离。为下一次计算最近的点做初始化准备

        for(int j=1;j<=n;j++){
            dist[j] = min(dist[j],g[t][j] + dist[t]);
            // cout<<"t:"<<t<<"j:"<<j<<" "<<dist[j]<<" ";
        }

3.当把所有的节点都初始化完之后,我们也就得出了1到n最短的距离

int Dijkstra(){
    //选择节点1为开始节点,并初始化各个节点之间的距离
    memset(dist,0x3f,sizeof(dist));
    //先给初始点的距离化为0,从它出发肯定是0.
    dist[1] = 0;
    for(int i=0;i<n;i++){
        int t = -1;
        //遍历每个节点
        //用vis来控制是否初始化过这个节点
        for(int j=1;j<=n;j++){
            if(!vis[j]&&(t==-1||dist[t]>dist[j])){
                t = j;
            }
        }
        vis[t] = true;
        for(int j=1;j<=n;j++){
            dist[j] = min(dist[j],g[t][j] + dist[t]);
            // cout<<"t:"<<t<<"j:"<<j<<" "<<dist[j]<<" ";
        }
        // cout<<endl;
    }
    return dist[n];
}

AC代码 

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 510;
int n,m;
int g[N][N];
int dist[N];
bool vis[N];

int Dijkstra(){
    //选择节点1为开始节点,并初始化各个节点之间的距离
    memset(dist,0x3f,sizeof(dist));
    //先给初始点的距离化为0,从它出发肯定是0.
    dist[1] = 0;
    for(int i=0;i<n;i++){
        int t = -1;
        //遍历每个节点
        //用vis来控制是否初始化过这个节点
        for(int j=1;j<=n;j++){
            if(!vis[j]&&(t==-1||dist[t]>dist[j])){
                t = j;
            }
        }
        vis[t] = true;
        for(int j=1;j<=n;j++){
            dist[j] = min(dist[j],g[t][j] + dist[t]);
            // cout<<"t:"<<t<<"j:"<<j<<" "<<dist[j]<<" ";
        }
        // cout<<endl;
    }
    return dist[n];
}

int main(){
    cin>>n>>m;
    memset(g,0x3f,sizeof(g));
    while(m--){
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b] = min(g[a][b],c);
    }
    int res = Dijkstra();
    if(res == INF) cout<<"-1";
    else{
        cout<<res;
    }
    return 0;
}

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

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

相关文章

【Daily Share】觉得浏览器low?手写一个浏览器扩展程序,让自己的浏览器变得与众不同!!!!

浏览器扩展 概念 扩展为浏览器添加了特性与功能。它通过我们所熟悉的 Web 技术-HTML&#xff0c;CSS 还有 JavaScript 来创建。扩展可以利用与 JavaScript 相同的网页 API&#xff0c;但是扩展也可以访问它自己专有的 JavaScript API。这意味着&#xff0c;和在网页里编码相比…

音视频基础知识

视频基础知识 分辨率 分辨率又称为解析度&#xff0c;分辨率越高&#xff0c;像素越多&#xff0c;图像越清晰。 视频分辨率&#xff1a;又称为图像分辨率&#xff0c;由视频的宽高组成&#xff0c;表示形式宽x高&#xff0c;常见的视频分辨率有480P、720P、1080P、2K(2048x…

动态规划-书籍复印

动态规划-书籍复印 1 描述2 样例2.1 样例 1:2.2 样例 2: 3 解题方法3.1 算法解题思路3.2 算法代码实现 该题是lintcode上的算法题&#xff0c;该题的解题思路是依据九章侯老师提供的解题思路去处理的&#xff1a; https://www.lintcode.com/problem/437/description 1 描述 给…

ACL2023 | 黑盒大模型如何微调?清华Decoder Tuning方法提升大模型few-shot场景效果

一、概述 title&#xff1a;Decoder Tuning: Efficient Language Understanding as Decoding 论文地址&#xff1a;https://arxiv.org/abs/2212.08408 代码&#xff1a;GitHub - thunlp/DecT 二、Motivation 现在有很多模型只提供API&#xff0c;没法直接训练&#xff0c;…

关键字 package、import的使用

一、package 关键字的使用 为了更好的实现项目中类型的管理&#xff0c;提供了包的概念使用package声明类或接口所属的包&#xff0c;声明在源文件的首行包 术语标识符&#xff0c;遵循标识符的命名规则、规范&#xff08;xxxyyyzzz&#xff09;、“见名知意”每 “ . ”一次&…

自动化测试selenium环境搭建

自动化测试工具selenium搭建 1. 自动化和selenium基本概念 1) 什么是自动化?为什么要做自动化&#xff1f; 自动化测试能够代替一部分的手工测试&#xff0c;自动化测试能够提高测试的效率。随着项目功能的增加&#xff0c;版本越来越多&#xff0c;版本的回归测试的压力也…

DEI脉冲发生器维修DEI脉冲电源维修PVX-4130

DEI电源维修型号包括:PVX-4130,PVX-4140,PVX-4150,PVX-4120,PVX-5500等型号均可维修。 美国DEI脉冲发生器维修PULSE Generator高压电源维修 DEI脉冲发生器产生高压波形至3500V。 针对高阻抗进行了优化电容性负载&#xff0c;很适合驱动静电引气格栅和偏转板飞行时间质谱仪中粒…

FP独立站不同支付方式的注意事项是什么?

今天&#xff0c;给FP独立站的老板们介绍2个独立站支付方式&#xff0c;以及这些不同的支付方式分别有什么注意事项。 一、PayPal支付 大部分建站平台都支持PayPal支付通道。如果是做美国市场的独立站卖家&#xff0c;PayPal每笔固定收取0.3美金不同比例的手续费&#xff0c;不…

IOS复杂震动AHAP文件编辑指南

简介 目前部分游戏会在播放一些特定的音乐音效时&#xff0c;令设备产生贴合音效的复杂震动&#xff0c;给玩家一个更好的游戏体验。这种复杂震动就是通过苹果的CoreHaptics库实现的。 下面是关于CoreHaptics的官方文档 ​​​​​​​Core Haptics | Apple Developer Docum…

DISC行为模型

DISC行为模型 这是一种研究人行为倾向性的理论&#xff0c;由哈佛大学教授、临床心理学家威廉马斯顿博士提出。它可以用来预测一个人的行为倾向性&#xff0c;让使用者更好地了解自己和影响他人&#xff01; 模型介绍 马斯顿博士发现&#xff0c;行事风格类似的人会展现出类似…

充电桩检测设备厂家TK4860C交流充电桩检定装置

TK4860系列是专门针对现有交流充电桩现场检测过程中接线复杂、负载笨重、现场检测效率低等问题而研制的一系列高效检测仪器&#xff0c;旨在更好的开展充电桩的强制检定工作。 充电桩检测设备是一款在交流充电桩充电过程中实时检测充电电量的标准仪器&#xff0c;仪器以新能源…

Pandora:一个让你呼吸顺畅的ChatGPT

什么是chatgpt ChatGPT是一种基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;的聊天机器人。GPT是一种基于神经网络的自然语言处理模型&#xff0c;它使用大规模的文本数据进行预训练&#xff0c;然后可以用于各种自然语言处理任务&#xff0c;如文本生成…

神州数码DCN路由器之间GREIPsec 配置

拓扑: 说明: R1: g 0/0:192.168.1.1/24 g 0/1:10.1.1.1/24 tunnel 1:172.16.1.1/24 R2: g 0/0:192.168.2.1/24 g 0/1:10.1.1.2/24 tunnel 1:172.16.1.2/24 配置思路: <

阿里Github斩获4.5万Stars!分享的Spring Cloud全栈笔记,你想象不到有多全

如何获得高并发经验&#xff1f; 这是我今天逛知乎的时候系统邀请我回答的一个问题&#xff0c;由此也引发了我的一些思考&#xff1a;为什么人人都想要获得高并发经验&#xff1b;想拥有高并发系统设计技能&#xff1f; 其原因LZ认为主要有以下三点&#xff1a; 涨薪&#…

Pytorch入门(一)数据加载初始化及训练过程监控

Pytorch入门系列大致会更5篇文章不到&#xff0c;以后有机会的话再细细更新吧&#xff0c;主要复习一下Pytorch基本知识&#xff0c;复习一下在大二入门Pytorch的学习笔记&#xff01;原教程位于B站&#xff0c;讲的个人感觉蛮好的。 超级传送门&#xff0c;这个系列教程会很快…

4月刚上岸今日头条(字节)测试开发岗【附答案】

今日头条测试开发面试回顾 字节跳动公司以发展迅猛&#xff0c;待遇优厚和面试难闻名于业界。前段时间面试字节跳动&#xff08;今日头条&#xff09;&#xff0c;并成功拿下高级测试开发工程师岗位后的面试题目回顾,供跳槽季的各位同学参考&#xff01; 一面 自我介绍 编程题…

Java基础-Java常用类2(String类)

本篇文章梳理Java常用类--String类. String类是非常重要的,也是面试的重灾区,一起加油啊~~ 主要讲解String类 : String类的基础知识String类的特性String类的方法String,StringBuilder,StringBuffer之间的比较字符串常量池String应用 : 到底创建了多少个对象 希望给您带来帮助~…

大屏时代:引领信息可视化的新潮流

在信息时代的浪潮下&#xff0c;数据已经成为推动各行各业发展的重要动力。然而&#xff0c;海量的数据如何快速、直观地呈现给用户&#xff0c;成为了一个亟待解决的难题。在这样的背景下&#xff0c;可视化大屏应运而生&#xff0c;以其出色的表现力和交互性成为信息展示的佼…

5.Nginx

文章目录 Nginx编译安装Nginx检查、启动、重启、停止nginx服务添加Nginx系统服务Nginx配置全局配置I/O事件配置HTTP配置Web服务的监听配置日志格式设定location常见配置指令访问状态统计配置 Nginx 一款高性能、轻量级Web服务软件 稳定性高系统资源消耗低对HTTP并发连接的处理能…

【开源项目】银行查询服务的设计和实现

银行查询服务的设计和实现 项目地址github&#xff1a;https://github.com/xl-echo/bankInquiryService项目地址gitee&#xff1a;https://gitee.com/xl-echo/bank-inquiry-service 银行查询服务的设计初衷是&#xff1a;为提供更加便利的查询服务&#xff0c;我们在分布式系…