Dijkstra算法(两种写法)
来源:互联网 发布:淘宝入驻条件及费用 编辑:程序博客网 时间:2024/06/05 13:22
<span style="font-size:14px;">//Dijkstra_001.cpp -- 单源最短路#include <iostream>#include <algorithm>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <queue>#include <vector>#include <map>typedef long long ll;using namespace std;const int INF = 0x3f3f3f3f;const int maxE = 1000 + 10;const int maxV = 100 + 10;/*int cost[maxV][maxV];int d[maxV];bool used[maxV];int V;void Dijkstra(int s){fill(d, d+V, INF);memset(used, 0, sizeof(used));d[s] = 0;while( 1 ){int v = -1;// 从尚未使用过的顶点中选择一个距离最小的顶点for( int i=0; i<V; i++ ){if( !used[i] && (v==-1 || d[i]<d[v]) )i = v;}if( v==-1 )break;used[v] = true;for( int i=0; i<V; i++ )d[i] = min(d[i], d[v]+cost[v][i]);}}*/struct edge{int to, cost;};typedef pair<int, int> P;// first是最短距离,second是顶点的编号int V, E;vector<edge> G[maxV];int d[maxV];void Dijkstra(int s){// 通过指定greater<P>参数,堆按照first从小到大的顺序取出值。priority_queue<P, vector<P>, greater<P> > pque;fill(d, d+V, INF);d[s] = 0;pque.push(P(0, s));while( !pque.empty() ){P p = pque.top();pque.pop();int v = p.second;if( d[v]<p.first )continue;// 只有小于或等于两种情况for( int i=0; i<G[v].size(); i++ ){edge e = G[v][i];if( d[e.to]>d[v]+e.cost ){d[e.to] = d[v] + e.cost;pque.push(P(d[e.to], e.to));}}}}int main(void){cin>>V>>E;int a, b, c;for( int i=0; i<E; i++ ){cin>>a>>b>>c;G[a].push_back((edge){b,c});G[b].push_back((edge){a,c});}Dijkstra(0);for( int i=0; i<V; i++ )cout<<i<<' '<<d[i]<<endl;return 0;}</span>
0 0
- Dijkstra算法(两种写法)
- Dijkstra算法的两种实现方法
- Prim算法的两种写法
- Kmp算法的两种写法
- [算法] 两种快速排序的while写法
- 快速排序算法——两种写法
- php 冒泡排序(两种写法)
- (二)Dijkstra算法
- 迪克斯特拉算法(Dijkstra)
- 图论(Dijkstra算法)
- Dijkstra算法(无负权值)
- Dijkstra(迪杰斯特拉)算法
- 迪克斯特拉算法(Dijkstra)
- Dijkstra(迪杰斯特拉)算法
- 迪杰斯特拉算法(Dijkstra)
- hdu 2962 Trucking 最短路+二分。。Dijkstra+SPFA两种算法实现。
- 【裸单源最短路:Dijkstra算法两种版本】hdu 1874 畅通工程续
- Singleton模式两种写法
- mac使用小技巧
- R语言基础编程技巧汇编 - 20
- php 设计模式
- WordPress头像无法显示两种解决办法
- 左连接、右连接、交叉连接、全外连接
- Dijkstra算法(两种写法)
- leetocde_Binary Tree Right Side View
- Linux shell "此处需要整数表达式"
- HDOJ 题目2795 Billboard(线段树单点更新)
- C语言指针
- 循环结构中break、continue、return和exit的区别
- 数字的空洞 水 南邮NOJ 1071
- seaJS
- HDU 1358 Period