最短路
2015-06-20 21:31
302 查看
各种算法比较
Dijkstra和floyd
图解Bellman-ford算法
SPFA算法、SPFA(BFS与DFS实现判断负环)
hdu 1874
1、Floyd
2、Dijkstra (O(n^2)) 可用堆进行优化
Dijkstra和floyd
图解Bellman-ford算法
SPFA算法、SPFA(BFS与DFS实现判断负环)
hdu 1874
1、Floyd
#include <stdio.h> #include <cstring> #include <algorithm> using namespace std; #define inf 0x3f3f3f3f #define N 205 int A ,path ,n; void Floyd(){ memset(path,-1,sizeof(path)); for(int k=0;k<n;++k) for(int i=0;i<n;++i) for(int j=0;j<n;++j) if(A[i][j]>A[i][k]+A[k][j]){ A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } } void output(int s,int e){ if(p[s][e]==-1) {printf(" %d",e);return;} output(s,p[s][e]); output(p[s][e],e); } int main() { int i,j,m,x,y,z; while(~scanf("%d%d",&n,&m)) { memset(A,inf,sizeof(A)); for(i=0;i<n;++i) A[i][i]=0; for(i=0;i<m;++i){ scanf("%d%d%d",&x,&y,&z); A[x][y]=A[y][x]=min(A[x][y],z); } int s,e; scanf("%d%d",&s,&e); Floyd(); if(A[s][e]!=inf) printf("%d\n",A[s][e]); else puts("-1"); } return 0; }
2、Dijkstra (O(n^2)) 可用堆进行优化
#include <stdio.h> #include <cstring> #include <algorithm> #include <stdlib.h> using namespace std; #define inf 0x3f3f3f3f #define N 205 int A ,low ,pre ,n,ans ; bool v ; void init() { memset(A,inf,sizeof(A)); for(int i=0; i<=n; ++i) A[i][i]=0; } void Dijkstra(int s) { int i,j; memset(v,0,sizeof(v)); v[s]=1; for(i=0; i<n; ++i) { low[i]=A[i][s]; if(i!=s&&A[i][s]!=inf) pre[i]=s; else pre[i]=-1; } low[s]=0; for(i=1; i<n; ++i) { int p,M=inf; for(j=0; j<n; ++j) if(!v[j]&&M>low[j]) { p=j; M=low[j]; } v[p]=1; for(j=0; j<n; ++j) if(!v[j]&&A[p][j]!=inf&&low[j]>low[p]+A[p][j]) { low[j]=low[p]+A[p][j]; pre[j]=p; } } } void output(int s,int e) { int len=0,p=e; while(p!=s) { ans[len++]=p; p=pre[p]; } printf("%d",s); for(int i=len-1;i>=0;--i) printf("->%d",ans[i]); puts(""); } int main() { int m; while(~scanf("%d %d",&n,&m)) { int a,b,x; init(); while(m--) { scanf("%d%d%d",&a,&b,&x); A[a][b]=A[b][a]=min(x,A[a][b]); } scanf("%d%d",&a,&b); Dijkstra(a); if(low[b]!=inf) printf("%d\n",low[b]); else puts("-1"); } return 0; }
相关文章推荐
- 黑马程序员——TCP和UDP传输
- 读取文件方法大全
- 线性表子系统
- jquery.lazyload.js——图片延迟出现
- Ubuntu12.04配置vnc远程桌面,解决Could not acquire name on session bus问题
- 结合keepalived实现redis群集高可用故障自动切换
- 多线程
- UVa120 - Stacks of Flapjacks (STL)
- java笔记(coursera-pku)
- hdu 5273 Dylans loves sequence 逆序数简单递推
- leetcode--Minimum Size Subarray Sum
- cocos2dx常见49种Action
- OpenCV实现图像搜索引擎(Image Search Engine)
- POJ水题1083区间重叠问题
- cocos2d-x 菜鸟实习生学习篇-菜单坐标
- HDU 5273
- Stars(一定要看,树状数组差点问线问题)
- 8.运行及总结
- 【初始化块】 类里的第4种成员(除Field、方法和构造器)
- 事件机制(事件冒泡与事件捕获)