首页 > 其他分享 >dijkstra最短路

dijkstra最短路

时间:2023-12-17 17:33:46浏览次数:30  
标签:输出 dist int 短路 dijkstra include 号点

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

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

输入格式

第一行包含整数 n 和 m。

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

输出格式

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

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

数据范围

1≤n≤500
1≤m≤500
图中涉及边长均不超过10000。

 

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

using namespace std;
const int N = 510;
int g[N][N], dist[N];
bool st[N];
int n,m;

void init(){
    memset(g, 0x3f, sizeof g);
    memset(dist, 0x3f, sizeof dist);
}

int dijkstra(){
    dist[1] = 0;
    for(int i = 0; i <n;i++){
        int t = -1;
        for(int j = 1; j<=n;j++)
            if (!st[j] && (t == -1 || dist[t] > dist[j]))
                t = j;
        st[t] = true;
//        printf("%d\n", t);
        for(int j = 1; j <= n; j++){
            dist[j] = min(dist[j], dist[t] + g[t][j]);
//            printf("dist[%d]=%d\n", j, dist[j]);
        }
    }
    
    if (dist[n] == 0x3f3f3f3f) return -1;
    else return dist[n];
}

int main(){
    init();
    scanf("%d%d", &n,&m);
    while(m--){
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        g[a][b] = min(g[a][b], c);
    }
    
    int res = dijkstra();
    
    cout << res;
    
    return 0;
}

 

标签:输出,dist,int,短路,dijkstra,include,号点
From: https://www.cnblogs.com/xyfmFocus/p/17909429.html

相关文章

  • 12.11 迪杰斯特拉方法实现最短路径(c++)
     今天通过自主学习,,对数据结构中的迪杰斯特拉方法实现最短路径进行了深造,让我学会了很多新的东西。首先是问题描述:用迪杰斯特拉算法实现有向网的最短路径输入格式:第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的两个点的及边上的权值,用空......
  • #P1009. 单源最短路
    模板代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e5+10;vector<pair<int,int>>a[N];intdis[N],vis[N];intn,m;voidspfa(){ for(inti=1;i<=n;i++)dis[i]=0x3f; queue<int>q; dis[1]=0; q.push(......
  • 12.2迪杰斯特拉方法实现最短路径
    掌握迪杰斯特拉方法设计文档 代码#include<iostream>usingnamespacestd;//迪杰特斯拉:邻接矩阵:一维数组+二维数组+点边数typedefintVexType;#defineMVNum100#defineMaxInt32767intS[MVNum],Path[MVNum],D[MVNum];//迪杰特斯拉的三个数组typedefstruct{......
  • [学习笔记]分层图最短路
    分层图的概念分层图最短路,听名字就知道他和其他最短路不一样,实际也确实如此,可以解决一些普通最短路无法解决的问题。比如有\(n\)个点\(m\)条带权无向边,可以将\(k\)条边进行某些操作,然后求出从\(1\)到\(n\)的最短路,此时即可使用分层图。例题例题1P4568[JLOI2011]......
  • 最短路径
    #include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;constintN=1010;structedge{intv,w;edge*next;};structnode{intk;edge*next;}a[1010];intn;intfind(intu){for(inti=0;i<n;i++){if(a......
  • 路径规划算法 - 求解最短路径 - A*(A-Star)算法
    Dijkstra(迪杰斯特拉)算法A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。A*算法是一个“搜索算法”,实质上是广度优先搜索算法(BFS)的优化A*算法的作用是“求解最短路径......
  • 最短路
    单源最短路:求一个点到其他点的最短路多源最短路:求任意两个点的最短路稠密图用邻接矩阵存,稀疏图用邻接表存储。稠密图:m和n2一个级别稀疏图:m和n一个级别朴素dij:intn,m,s,a,b,c;constintN=100010;structedge{intv,w;};vector<edge>e[N];intd[N],vis[N];......
  • Java逻辑运算符,短路运算
     短路运算 因为c=5,所以c<4为false,又因为逻辑与运算,只要出现一个false就会输出所以booleand=(c<4)&&(c++<4);这行代码直接会输出false,(c++<4)也不会被执行所以输出的结果为false,c=5,而不是c=6.-----------------------------------------------------------------------......
  • 路径规划算法 - 求解最短路径 - Dijkstra算法
    Dijkstra算法的思想是广度优先搜索(BFS)贪心策略。是从一个顶点到其余各顶点的最短路径算法,节点边是不各自不同的权重,但都必须是正数如果是负数,则需要Bellman-Ford算法如果想求任意两点之间的距离,就需要用Floyd算法求节点0->4的最短路径每次从未标记的节点中选择距离......
  • 求最短路径迪杰斯特拉算法
    代码运行截图:完整代码:#include<stdio.h>#include<stdlib.h>#defineMaxSize20#defineMAX999typedefstructArcNode{//边表intadjvex;//边表中是顶点号!!structArcNode*next;intweight;}ArcNode;typedefstructVN......