dijkstra+堆优化

Posted zxz666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dijkstra+堆优化相关的知识,希望对你有一定的参考价值。

http://acm.hdu.edu.cn/showproblem.php?pid=2544

 1 #include<bits/stdc++.h>
 2 #include<vector>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<cstdio>
 6 #define ll long long
 7 using namespace std;
 8 struct note
 9 {
10     int v,p;
11     note() {}
12     note(int a,int b):v(a),p(b) {}
13 
14 };
15 struct cmp
16 {
17     operator ()(note a,note b)
18     {
19         return a.p>b.p;
20     }
21 
22 };
23 int jl[103];
24 int vim[103];
25 vector<note>q[103];
26 priority_queue<note,vector<note>,cmp>pp;
27 void df(int stae)
28 {
29     memset(jl,0x3f3f3f3f,sizeof(jl));
30     memset(vim,0,sizeof(vim));
31     pp.push(note(stae,0));
32     jl[stae]=0;
33     while(!pp.empty())
34     {
35         note now=pp.top();
36         pp.pop();
37         if(vim[now.v])continue;
38         vim[now.v]=1;
39         for(int i=0; i<q[now.v].size(); i++)
40         {
41             int v=q[now.v][i].v;
42             int p=q[now.v][i].p;
43             if(!vim[v]&&jl[v]>jl[now.v]+p)
44             {
45                 jl[v]=jl[now.v]+p;
46                 pp.push(note(v,jl[v]));
47             }
48         }
49     }
50 }
51 int n,m;
52 int main()
53 {
54 
55     while(scanf("%d%d",&n,&m)&&n+m)
56     {
57         memset(ss,0x3f3f3f3f,sizeof(ss));
58         for(int i=1; i<=n; i++)q[i].clear();
59         for(int i=1; i<=m; i++)
60         {
61             int a,b,c;
62             scanf("%d%d%d",&a,&b,&c);
63             q[a].push_back(note(b,c));
64             q[b].push_back(note(a,c));
65         }
66         df(1);
67         printf("%d\n",jl[n]);
68     }
69 }

 

以上是关于dijkstra+堆优化的主要内容,如果未能解决你的问题,请参考以下文章

dijkstra最短路算法(堆优化)

使用最小堆优化Dijkstra算法

AcWing 850. Dijkstra求最短路 II(Dijkstra稠密图堆优化模板)

Dijkstra+优先队列 堆优化

最短路 P1144 最短路计数Dijkstra堆优化/SPFA

最短路 P1144 最短路计数Dijkstra堆优化/SPFA