首页 > 其他分享 >最短路

最短路

时间:2023-11-30 20:55:07浏览次数:32  
标签:int 短路 邻接矩阵 dijkstra 来存 起点 dis

1.稠密图用邻接矩阵来存

朴素版dijkstra 算法

acwing 849

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 510;
 5 int n,m;
 6 int dis[N]; //每个点到起点的最短距离(路)
 7 int g[N][N]; //稠密图邻接矩阵来存
 8 bool st[N]; //该集合表示状态,表示最短距离已经被确定的点
 9 
10 int dijkstra()
11 {
12     memset(dis,0x3f, sizeof dis); //初始化后面每一个点到起点的距离为无穷
13     dis[1] = 0; //第一个点到起点的距离为0
14     
15     for (int i = 0; i < n; i ++ )
16     {
17         int t  = -1; //不在st集合中距离起点最近的点
18         for (int j = 1; j <= n; j ++ ) //枚举每一个点
19             if(!st[j] && (t == -1 || dis[j] < dis[t])) ///该步骤即寻找还未确定最短路的点中路径最短的点
20             t = j; //更新最短距离 ,是t表示距离起点最近
21             
22             st[t] = true; //标记
23         
24         for (int j = 1; j <= n; j ++ ) //依次更新每个点到相邻点的路径值
25            dis[j] = min(dis[j],dis[t] + g[t][j]);  //t这个点到起点的最短距离 + t到j 的距离
26     }
27     
28     if(dis[n] == 0x3f3f3f3f) return -1; //起点和N不连通
29     return dis[n];
30 }
31 
32 
33 
34 int main()
35 { //自环不是最小的,会越来越大,可以不用判断
36     scanf("%d%d", &n, &m);
37     
38     memset(g,0x3f, sizeof g);
39     
40     while (m -- )
41     {
42         int a,b,c;
43         scanf("%d%d%d", &a, &b, &c);
44         g[a][b] = min(g[a][b],c); //如果有重边,取最短的边
45         
46     }
47 
48     int t = dijkstra();
49     
50     printf("%d\n",t);
51     return 0;
52 }
Code

 

标签:int,短路,邻接矩阵,dijkstra,来存,起点,dis
From: https://www.cnblogs.com/rw666/p/17868322.html

相关文章

  • P3371 【模板】单源最短路径
    【模板】单源最短路径(标准版)题目背景2018年7月19日,某位同学在NOIDay1T1归程一题里非常熟练地使用了一个广为人知的算法求最短路。然后呢?\(100\rightarrow60\);\(\text{Ag}\rightarrow\text{Cu}\);最终,他因此没能与理想的大学达成契约。小F衷心祝愿大家不再......
  • 对第K短路一题的一些解释
    首先证明那个比较显然的推论我们先证明一下一个小引理:这个BFS先出队的点一定比后出队的点的代价小或等于用数学归纳法,假设前面已经出队的点满足以上性质,之前最后一个出队的点为\(x\),现在队列里面的队首是\(y\),那我们就是要证明\(y\)的代价比\(x\)小或等于我们考虑一下\(y\)是怎......
  • 重要的保护:BOSHIDA DC电源模块短路保护
    重要的保护:BOSHIDADC电源模块短路保护DC电源模块是实验室和工业中非常常见的电源,它能够提供稳定的电压和电流输出,以满足各种设备和电路的需求。然而,如果DC电源模块没有短路保护,它可能会对所连接的仪器和设备造成损害,甚至引起火灾等严重后果。因此,在设计和制造DC电源模块时,短路保......
  • dijkstra跑全源最短路
     跑n次voiddijk(){ for(inti=1;i<=n;i++) for(intj=1;j<=n;j++)d[i][j]=inf; priority_queue<pii,vector<pii>,greater<pii>>q; for(intS=1;S<=n;S++){ q.push(pii(0,S)); for(inti=1;i<=n;i++)......
  • 最短路
    Dijkstra算法#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllinf=1e18+10;vector<pair<ll,ll>>G[100000+10];lln,m,s,d[100000+10];boolvis[100000+10];voiddijkstra(){ priority_queue<pair<ll,ll>,vec......
  • 图- 最短路径
    图的最短路径最小生成树与最短路径最小生成树包含图中的所有点。能保证整个树中的所有路径之和最小。最短路径不一定包含图中的所有结点。(有向图,部分结点无法以最短路方式被加入)能保证从一点到图中其他点的路径最小。Dijkstra迪杰斯特拉算法Dijkstra按路径长度递增的......
  • 最短路径树
    \(md\)怎么今天写一个题就遇到一个没学过的知识点?我真的什么都没学过吗???最短路径树是一棵树,满足\(dis(u,root)\)等于在原图中源点到\(u\)的最短路长度。求这个很简单,也是直接\(dij\)就行了。但是又要求这棵树边权和最小,于是有了一个贪心算法,即时地更新\(pre\)。感觉不......
  • 最短路树
    定义最短路树:以图上一个点为根节点,删去部分边后所形成的树,树的边权满足任意一点与根结点的路径长度等于图上两点的最短路径长度。求法可以采用dij求解。每次更新\(dis_v\)时,记录每个点最后一次用来更新的边,即为最短路树。核心代码如下,时间复杂度为dij的时间复杂度即\(......
  • 图论——最短路 学习笔记
    图论——最短路学习笔记其实是复习性质的,主要是总结,证明什么的,等上大学再说。定义单源最短路:从一个点\(q\)出发,到其他所有点的最短路。全源最短路:任意两点见最短路。算法对比算法FloydJohnsonBellman–FordSPFADijkstra类型全源全源单源单源单源......
  • 最短路径问题
    有权图的单源最短路算法Dijkstra算法给定任何一个非负权边的图$v_0,....v_n$,要找到\(v_0\)到\(v_m\)的最短路径。设已找到的最短路径的结点集合为\(S\),未找到最短路径的结点集合为\(T\),\(V_0\)到所有结点的最短路径数组为\(dist\),初始状态\(dist[0]=0,dist[1..n]=......