hdu--2544--题如其名<最短路>--dij<priority_queue>||spfa<queue>
2014-08-19 14:42
531 查看
这题 让我深刻地 感受到了 题如其名 =-= .........
一直以来都写spfa 这次 也顺便写了下 dij<链式前向星&&priority_queue> 代码太长了..
但是 要是思路清晰的话 写下去的感觉很爽的...
当然 我还是更加喜欢 spfa
关于 链式前向星 可以---传送--出产地学习
关于 spfa -- 我没找到特别出色的介绍<我也写过..> 这个不难 你可以随便去找一篇来学习
关于 dij -- 也是图论的入门重要算法 介绍它的博客实在太多了... 但是 使用优先队列版本的dij 没见过详细介绍的
但 既然都是优化了 你只要明白了 dij的算法思想 你就能看懂我下面的优先队列来优化的写法---自己写heap 效率更高 但我还不会=-=-----
View Code
虽说 spfa 不稳定 可能会出现故意数据来卡它 ... 有必要这么 丧病吗#78....
这2个 完全可以当做模板吧... 只要你会了思想 就能自己手写出来了 到时候 也就自然而然会形成自己的风格-.-
today:
这是最好的时代 这是最坏的时代
这是智慧的时代 这是愚蠢的时代
这是信仰的时期 这是怀疑的时期
这是光明的季节 这是黑暗的季节
这是希望之春 这是失望之冬
人们面前有着各样事物 人们面前一无所有
人们正在直登天堂 人们正在直下地狱
---------------------------------------------------------now?
一直以来都写spfa 这次 也顺便写了下 dij<链式前向星&&priority_queue> 代码太长了..
但是 要是思路清晰的话 写下去的感觉很爽的...
当然 我还是更加喜欢 spfa
关于 链式前向星 可以---传送--出产地学习
关于 spfa -- 我没找到特别出色的介绍<我也写过..> 这个不难 你可以随便去找一篇来学习
关于 dij -- 也是图论的入门重要算法 介绍它的博客实在太多了... 但是 使用优先队列版本的dij 没见过详细介绍的
但 既然都是优化了 你只要明白了 dij的算法思想 你就能看懂我下面的优先队列来优化的写法---自己写heap 效率更高 但我还不会=-=-----
#include <iostream> #include <cstring> #include <queue> using namespace std; int n; const int inf = 0x3f3f3f3f; const int size = 110; struct graph { int num; int next[size*10]; int dist[size*10]; }node[size]; bool vis[size]; int dist[size]; void init( ) { for( int i = 0 ; i<size ; i++ ) { node[i].num = 0; } memset( vis , false , sizeof(vis) ); } void spfa( ) { queue<int>q; while( !q.empty() ) q.pop(); q.push(1); vis[1] = true; for( int i = 0 ; i<=n ; i++ ) { dist[i] = i==1 ? 0 : inf; } while( !q.empty() ) { int now = q.front(); q.pop(); vis[now] = false; for( int i = 0 ; i<node[now].num ; i++ ) { if( dist[now] + node[now].dist[i] < dist[ node[now].next[i] ] ) { dist[ node[now].next[i] ] = dist[now] + node[now].dist[i]; if( !vis[ node[now].next[i] ] ) { vis[ node[now].next[i] ] = true; q.push( node[now].next[i] ); } } } } } int main() { int m , st , end , cost; while( cin >> n >> m &&(n||m) ) { init( ); while( m-- ) { cin >> st >> end >> cost; node[st].next[ node[st].num ] = end; node[st].dist[ node[st].num++ ] = cost; node[end].next[ node[end].num ] = st; node[end].dist[ node[end].num++ ] = cost; } spfa( ); cout << dist << endl; } return 0; }
View Code
虽说 spfa 不稳定 可能会出现故意数据来卡它 ... 有必要这么 丧病吗#78....
这2个 完全可以当做模板吧... 只要你会了思想 就能自己手写出来了 到时候 也就自然而然会形成自己的风格-.-
today:
这是最好的时代 这是最坏的时代
这是智慧的时代 这是愚蠢的时代
这是信仰的时期 这是怀疑的时期
这是光明的季节 这是黑暗的季节
这是希望之春 这是失望之冬
人们面前有着各样事物 人们面前一无所有
人们正在直登天堂 人们正在直下地狱
---------------------------------------------------------now?
相关文章推荐
- hdu 2544 最短路(最短路径)(flody、dij、dij+priority queue、bellman、spfa)
- Codeforces 449B Jzzhu and Cities (最短路/SPFA/priority_queue<int>Q)
- HDU 2544 最短路 <SPFA算法>
- hdu 2544 最短路<java>
- hdu 1509 Windows Message Queue<priority_queue>
- hdu 2873 看病要排队 <priority_queue>
- HDU 2544 最短路 <裸地迪杰斯特拉算法>
- HDU 2544-最短路(最短路spfa)
- 优先级队列(java.util.PriorityQueue<E>)
- POJ 3253 Fence Repair (priority_queue的用法) ----- less<int> 和 greater<int>
- HDU 2544-最短路(最短路spfa)
- [dijkstra/SPFA/floyd]HDU 2544最短路
- HDU 2544 最短路 SPFA 邻接表 模板
- <STL学习笔记>Priority_queue
- Hdu 2544 最短路 (Dijkstra+SPFA+Floyd模板)
- HDU 2544 最短路 SPFA 邻接表 模板
- hdu 2544 【总结】 Dijkstra,Bellman-Ford ,SPFA 最短路求法及对应优化
- hdu 2544 【总结】 Dijkstra,Bellman-Ford ,SPFA 最短路求法及对应优化
- hdu 2544 最短路(spfa)
- HDU 2544 最短路【SPFA + SLF】