HDU 2544 最短路(Dijkstra和Floyd)
2012-06-15 09:07
543 查看
题目链接
非常裸的最短路问题,昨天把Dijkstra的思想理解了下,发现和prim非常相似,都是用一个low数组记录到达每个点的最短距离,昨天WA了N次,发现数据中竟然有两个点的权值有的时候有好几个。。。杭电上这个题数据没有重边。
今天看了一下弗洛伊德,代码真的是挺简单,思想不是很理解。。。先代码实现,然后慢慢体会他的DP思路。
非常裸的最短路问题,昨天把Dijkstra的思想理解了下,发现和prim非常相似,都是用一个low数组记录到达每个点的最短距离,昨天WA了N次,发现数据中竟然有两个点的权值有的时候有好几个。。。杭电上这个题数据没有重边。
今天看了一下弗洛伊德,代码真的是挺简单,思想不是很理解。。。先代码实现,然后慢慢体会他的DP思路。
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100000 int p[111][111],o[101],low[101]; int main() { int n,m,i,j,k,sv,ev,w,min; while(scanf("%d%d",&n,&m)!=EOF) { if(n == 0&&m == 0) break; memset(o,0,sizeof(o)); for(i = 1; i <= n; i ++) for(j = 1; j <= n; j ++) { if(j != i) p[i][j] = N; else p[i][j] = 0; } for(i = 1; i <= m; i ++) { scanf("%d%d%d",&sv,&ev,&w); if(p[sv][ev] > w) p[sv][ev] = w; if(p[sv][ev] > w) p[ev][sv] = w; } for(i = 1; i <= n; i ++) { low[i] = p[1][i]; } o[1] = 1; for(i = 2; i <= n-1; i ++) { min = N; for(j = 1; j <= n; j ++) { if(min > low[j]&&o[j] == 0) { min = low[j]; k = j; } } o[k] = 1; for(j = 1; j <= n; j ++) { if(low[j] > min + p[k][j]&&o[j] == 0) { low[j] = min +p[k][j]; } } } printf("%d\n",low ); } return 0; } 弗洛伊德O(n^3)
#include <stdio.h> #include <string.h> #define N 1000000 int p[101][101]; int main() { int n,m,i,j,k,sv,ev,w; while(scanf("%d%d",&n,&m)!=EOF) { if(n == 0&&m == 0) break; memset(p,0,sizeof(p)); for(i = 0;i <= n;i ++) for(j = 0;j <= n;j ++) { if(i == j) p[i][j] = 0; else p[i][j] = N; } for(i = 1;i <= m;i ++) { scanf("%d%d%d",&sv,&ev,&w); if(p[sv][ev] > w) { p[sv][ev] = w; p[sv][ev] = w; p[ev][sv] = w; p[ev][sv] = w; } } for(i = 1;i <= n;i ++) for(j = 1;j <= n;j ++) for(k = 1;k <= n;k ++) { if(p[j][k] > p[j][i] + p[i][k])//注意这个状态转移方程 p[j][k] = p[j][i] + p[i][k]; } printf("%d\n",p[1] ); } return 0; }
相关文章推荐
- HDU 2544 最短路【dijkstra+floyd+spfa+bellman-ford】
- HDU2544---最短路(dijkstra&&floyd&&spfa)
- HDU 2544 最短路(四种写法:Floyd、Dijkstra、Bellman-Ford、SPFA)
- HDU 2544 最短路(dijkstra or Floyd or bellman or spfa )
- hdu-2544-最短路(Dijkstra + Dijkstra优先队列 + Bellman-ford + SPFA +Floyd) 纯模板题
- hdu 2544 最短路 (dijkstra,floyd)
- hdu 2544 最短路 (dijkstra,floyd)
- HDU 2544:最短路( 最短路径入门 &&Dijkstra && floyd )
- Hdu 2544 最短路 (Dijkstra+SPFA+Floyd模板)
- HDU 2544 最短路 dijkstra floyd
- HDU 2544-最短路(SPFA,Dijkstra,Floyd)
- HDU 2544 最短路 Dijkstra 算法、 Floyd 算法 Bellman_ford算法
- Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法汇总 HDU 2544为例
- HDU 2544 最短路(单源最短路 dijkstra / floyd / dijkstra(堆优化)/dijkstra+邻接链表+堆优化)
- HDU-#2544 最短路(Dijkstra、Floyd、Bellman-Ford、SPFA)
- HDU 2544 最短路(dijkstra,Floyd,spfa)
- HDU 2544 最短路 (Dijkstra || Floyd)
- [dijkstra/SPFA/floyd]HDU 2544最短路
- HDU - 2544 - 最短路 (最基础单源最短路问题!!dijkstra+floyd+SPFA)
- HDU 2544 最短路(Floyd + Dijkstra + SPFA + 使用链式前向星优化的SPFA + 浅谈最短路)