最短路 冷不防 2021-11-02 14:24 447阅读 0赞 复习下图论算法 1. 邻接表的Dijkstra ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] //邻接表存储图的最短路 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> using namespace std; #define MAXN 100100 struct Edge { int u, next, val; Edge() {} Edge( int v , int Next ,int Val): u(v),next(Next), val(Val) { } }edge[MAXN]; const int inf = 0x7f7f7f7f; int head[MAXN],dis[MAXN], visit[MAXN], size, S, T, N, M; void init( ) { for( int i = 0; i < MAXN; i++) head[i] = -1; size = 0; } void AddEdge( int u, int v, int val) { edge[size] = Edge( v, head[u], val); head[u] = size++; edge[size] = Edge( u, head[v], val); head[v] = size++; } int dij( ) { for( int i = 1; i <= N; i++) { dis[i] = inf; visit[i] = 0; } for( int e = head[S]; e != -1; e = edge[e].next ) { int v = edge[e].u; int w = edge[e].val; dis[v] = w; } visit[S] = 1; dis[S] = 0; for( int i = 1; i <= N; i++) { int oo = inf, k; for( int j = 1; j <= N; j++) { if( !visit[j] && dis[j] < oo ) { oo = dis[j]; k = j; } } visit[k] = 1; for( int e = head[k]; e != -1; e = edge[e].next) { int v = edge[e].u; int w = edge[e].val; if( !visit[v] && dis[v] > dis[k] + w && dis[k] != inf) { dis[v] = dis[k] + w; } } } return dis[T]; } int main( ) { int a, b, c; while( scanf("%d%d", &N, &M), N + M) { init( ); for( int i = 1; i <= M; i++) { scanf("%d%d%d",&a, &b, &c); AddEdge(a, b, c); } S = 1; T = N; printf("%d\n", dij()); } return 0; } 2. 邻接表 + 优先队列 + Dijkstra ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] //邻接表存储图的最短路 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <queue> using namespace std; #define MAXN 100100 struct Edge { int u, next, val; Edge() {} Edge( int v , int Next ,int Val): u(v),next(Next), val(Val) { } }edge[MAXN]; const int inf = 0x7f7f7f7f; int head[MAXN],dis[MAXN], visit[MAXN], size, S, T, N, M; struct node { int ID,dis; bool operator < ( const node &A) const { return dis < A.dis; } }; void init( ) { for( int i = 0; i <= N; i++) { head[i] = -1; visit[i] = 0; dis[i] = inf; } size = 0; } void AddEdge( int u, int v, int val) { edge[size] = Edge( v, head[u], val); head[u] = size++; edge[size] = Edge( u, head[v], val); head[v] = size++; } //优先队列优化 int dij( ) { priority_queue<node>q; node p; p.ID = S; p.dis = 0; q.push(p); dis[S] = 0; while( !q.empty( )) { p = q.top( ); q.pop(); int v = p.ID; int wx = p.dis; if( wx != dis[v] ) continue; for( int e = head[v]; e != -1; e = edge[e].next) { int u = edge[e].u; int w = edge[e].val; if( dis[u] > wx + w ) { dis[u] = wx + w; p.ID = u; p.dis = dis[u]; q.push( p ); } } } return dis[T]; } int main( ) { int a, b, c; while( scanf("%d%d", &N, &M), N + M) { init( ); for( int i = 1; i <= M; i++) { scanf("%d%d%d",&a, &b, &c); AddEdge(a, b, c); } S = 1; T = N; printf("%d\n", dij()); } return 0; } 转载于:https://www.cnblogs.com/tangcong/archive/2012/07/10/2584002.html [ContractedBlock.gif]: https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif [ExpandedBlockStart.gif]: /images/20211101/0fbebd856de442ca9bba5ba313049f5d.png
相关 最短路 <table> <tbody> <tr> <td> <h2>最短路</h2> <strong>Time Limit: 5000/1000 MS (Java/O 向右看齐/ 2024年02月18日 22:54/ 0 赞/ 44 阅读
相关 最短路 \[hdu 1599\] ([http://acm.hdu.edu.cn/showproblem.php?pid=1599][http_acm.hdu.edu.cn_showp 红太狼/ 2022年08月04日 08:28/ 0 赞/ 165 阅读
相关 C--最短路 Problem Description 给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。 Input 多组输入。 对于每组数据。 以你之姓@/ 2022年07月12日 08:26/ 0 赞/ 124 阅读
相关 最短路 队列+松弛操作 读取队头顶点u,并将队头顶点u出队(记得消除标记);将与点u相连的所有点v进行松弛操作,如果能更新估计值(即令d\[v\]变小),那么就更新,另外,如果 忘是亡心i/ 2022年06月11日 04:06/ 0 赞/ 205 阅读
相关 最短路 一下模板均已通过HDUOJ 2544 程序设计竞赛队空间和时间复杂度要求都很高,所以朴素的Dijkstra[算法][Link 1]无论时间还是空间,效率都很低。 所以,一般 淡淡的烟草味﹌/ 2022年06月09日 04:28/ 0 赞/ 241 阅读
相关 最短路径(Dijkstra)-HDU 2544-最短路 最短路径(Dijkstra)-HDU 2544-最短路 -------------------- 题目链接: [最短路][Link 1] 亦凉/ 2022年05月14日 03:38/ 0 赞/ 211 阅读
相关 最短路 最短路 典型用途:交通网络的问题——从甲地到乙地之间是否有公路连通?在有多条通路的情况下,哪一条路最短? 交通网络用有向网来表示:顶点——表示城市,弧——表示两个城 淡淡的烟草味﹌/ 2022年03月18日 12:35/ 0 赞/ 253 阅读
相关 最短路 Floyed [http://codevs.cn/problem/1077/][http_codevs.cn_problem_1077] include<cstdi ﹏ヽ暗。殇╰゛Y/ 2021年11月18日 00:30/ 0 赞/ 291 阅读
相关 最短路 复习下图论算法 1. 邻接表的Dijkstra ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] / 冷不防/ 2021年11月02日 14:24/ 0 赞/ 448 阅读
相关 HDU 2544 最短路 最短路 时间限制:5000/1000 MS(Java / Others)内存限制:32768/32768 K(Java /其他) 提交总数:106773接受提交内容: 桃扇骨/ 2021年10月18日 08:20/ 0 赞/ 320 阅读
还没有评论,来说两句吧...