首页 > 其他分享 >考研数据结构——每日一题[Dijkstra求最短路]

考研数据结构——每日一题[Dijkstra求最短路]

时间:2023-08-12 17:02:22浏览次数:34  
标签:输出 include dist int 样例 Dijkstra 数据结构 号点 考研

849. Dijkstra求最短路 I

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。

请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。

输入格式 第一行包含整数 n 和 m。

接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

输出格式 输出一个整数,表示 1 号点到 n 号点的最短距离。

如果路径不存在,则输出 −1。

数据范围 1≤n≤500, 1≤m≤10^5^, 图中涉及边长均不超过10000。

输入样例: 3 3 1 2 2 2 3 1 1 3 4 输出样例: 3


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

using namespace std;

const int N = 510, M = 100010, INF = 0x3f3f3f3f;

int n, m;//点数,边数 
int g[N][N], dist[N];
bool st[N];

int dijkstra()
{
    memset(dist, 0x3f, sizeof dist);//初始全部正无穷
    dist[1] = 0;//起点距离为0【点下标从1开始】
    for (int i = 0; i < n; i ++ )
    {
        int t = -1;//路径经过的点下标  
        for (int j = 1; j <= n; j ++ ) //点下标从1开始
            if (!st[j] && (t == -1 || dist[t] > dist[j])) // 开始第一个或者路径更短 
                t = j;
        st[t] = true;
        for (int j = 1; j <= n; j ++ )//每新加入一个点后更新所有路径 [三角形判断]
            dist[j] = min(dist[j], dist[t] + g[t][j]);
    }
    return dist[n];//迭代状态最后放到走了第n次,经过n个点 
}

int main()
{
    scanf("%d%d", &n, &m);
    memset(g, 0x3f, sizeof g);
    while (m -- )
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        g[a][b] = min(g[a][b], c);//有重边取最小 
    }

    int res = dijkstra();
    if (res == INF) puts("-1");//无法构造最小生成树(不能经过所有点,dist[n]没有被更新,为INF) 
    else printf("%d\n", res);

    return 0;
}

标签:输出,include,dist,int,样例,Dijkstra,数据结构,号点,考研
From: https://blog.51cto.com/u_15623277/7060082

相关文章

  • pandas-基础数据结构
    pandas-基础数据结构目录pandas-基础数据结构数据结构Series创建Series常用操作索引缺失数据添加和修改删除DataFrame创建DataFrame常用操作索引和切片添加和修改索引后修改删除参考资料数据结构Pandas的主要数据结构是Series(一维数据)与DataFrame(二维数据)⽆论是numpy中的NAN......
  • 「算法与数据结构」从入门到进阶吐血整理推荐书单
    一.入门系列这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现,但是看过以下这些书对于之后实现算法打下坚实的思维基础。很适合在闲暇之余拿出来阅读一番。1.1《啊哈!算法》这不过是一本有趣的算法书而......
  • 想进大厂?先把这些数据结构与算法学明白!!!
    *文末有1元解锁专栏福利今天聊聊掌握了不一定能拿到大厂Offer,但不掌握一定进不去大厂的神技「数据结构与算法」。为什么突然提到了数据结构与算法呢?这要从一个朋友的吐槽开始。我这位朋友一心想进大厂,学历还不错、能力也不错,但就是拿不到大厂Offer。大家都劝他多刷LeetCode,把......
  • 【数据结构】排序2 插入排序
    插入排序的基本思想:每次将一个待排序的记录按其关键字大小插入前面已经排好序的序列,直到全部关键字都插入到子序列中为止。根据这种思想有这几种常用的插入排序算法:直接插入,折半插入和希尔排序。1.直接插入排序......
  • 数据结构
    一.链表#链表节点classNode:def__init__(self,dataVal=None):self.dataVal=dataValself.next=None#开始节点classSLinkedList:def__init__(self):self.next=None#打印链表defprintLink(self):pNo......
  • 考研数据结构——每日一题[最小生成树Kruskal]
    Kruskal算法O(mlogm)贪心按边权从小到大加入边,并查集判断点是否在集合中,不在的加入并查集#include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=510 , M=100010;intn,m;structEdge{ inta,b,c;//a->b:value=c bo......
  • 【数据结构】线段树
    例题1:给定一个正整数数列,每一个数都在添加操作:向序列后添加一个数,序列长度变成;询问操作:询问这个序列中最后程序运行的最开始,整数序列为空。一共要对整数序列进行次操作。写一个程序,读入操作的序列,并输出询问操作的答案。数据范围这道题看第一眼:暴力,再看一眼:爆炸(bushiTLE。......
  • 《VTK图形图像开发进阶》第3章VTK基本数据结构——不同类型的数据集
    ......
  • 2.0 Python 数据结构与类型
    数据类型是编程语言中的一个重要概念,它定义了数据的类型和提供了特定的操作和方法。在python中,数据类型的作用是将不同类型的数据进行分类和定义,例如数字、字符串、列表、元组、集合、字典等。这些数据类型不仅定义了数据的类型,还为数据提供了一些特定的操作和方法,例如字符串支持......
  • 《VTK图形图像开发进阶》第3章VTK基本数据结构——属性数据
    属性数据(AttributeData)是与数据集组织结构相关联的信息。3.1标量数据#include<vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);VTK_MODULE_INIT(vtkRenderingFreeType);VTK_MODULE_INIT(vtkInteractionStyle);#include<vtkSmartPointer.h>#include<vtkPoint......