随笔分类 -  最短路

杭电 1596 find the safest road
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>double dis[1010],map[1010][1010];int hash[1010];int n,a,b;void dijkstra(){ for(int i=1;i<=n;i++) { hash[i]=0; dis[i]=0; }//前面吧这部分内容放到了主函数里面,结果不对。 dis[a]=1; for(int i=1;i<=n;i++) { double max=-1; int pos; for(int j=1;j<=n 阅读全文
posted @ 2011-07-18 21:51 枫叶飘泪 阅读(184) 评论(0) 推荐(0)
杭电 3790 最短路径问题
摘要:这个题目是套用dijstra()模板,但又拐了一个弯,本题每条路径上都有两个权值,本题不必考虑花费,直接球最短路,只是在更新顶点值的时候有一个特殊处理,求得花费。#include<stdio.h>#include<string.h>#include<stdlib.h>int n,m,s,t;int inf=0x7fffffff;int hash[1010],dis[1010],map[1010][1010],pay[1010][1010],des[1010];void dijstra(){ dis[s]=0; des[s]=0; for(int i=1;i& 阅读全文
posted @ 2011-07-18 20:10 枫叶飘泪 阅读(394) 评论(0) 推荐(0)
杭电 1874 畅通工程续
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int inf=0x7fffffff;int map[210][210],hash[210],dis[210];int n,m,s,t;void dijstra(){ dis[s]=0; for(int i=0;i<n;i++) { int t=inf,pos; for(int j=0;j<n;j++) { if(hash[j]==0) { if(t>dis[j]) { t=dis[j]; pos=j; } } } hash[pos]= 阅读全文
posted @ 2011-07-16 20:45 枫叶飘泪 阅读(158) 评论(0) 推荐(0)
杭电 2544 最短路
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int inf=0x7fffffff;int n,m;int map[110][110],hash[110],dis[110];void dijstra(){ dis[1]=0; for(int i=1;i<=n;i++) { int t=inf,pos; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(dis[j]<t) { t=dis[j]; pos=j; } } } hash[pos]=1; 阅读全文
posted @ 2011-07-16 20:24 枫叶飘泪 阅读(172) 评论(0) 推荐(0)
求最短路的两个算法dijkstra()和floyed()的比较
摘要:1.dijkstra()算的是某个固定点到任意两点的最短路,而floyed()则是计算图中任意两点之间的最短路。2.floyed()算法算的最大数组可开至100左右,而dijkstra()可以更大。 阅读全文
posted @ 2011-05-20 21:46 枫叶飘泪 阅读(369) 评论(0) 推荐(0)
floyed()模板
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int n,m,map[124][124];const int inf=0x7fffffff;void floyed(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) if(map[i][j]!=inf&&map[i][k]!=inf) if(map[i][j]+map[i][k]<map[j][k]) map[j][k]=ma 阅读全文
posted @ 2011-05-20 19:36 枫叶飘泪 阅读(227) 评论(0) 推荐(0)
dijkstra()模板
摘要:#include<stdio.h>#include<stdlib.h>#include<string.h>int n,m,hash[1010],dis[1010],map[1010][1010];const int inf=0x7fffffff;void dijstra(){ dis[1]=0; for(int i=1;i<=n;i++) { int t=inf,pos; for(int j=1;j<=n;j++)//找出当前未标记的最小顶点 { if(hash[j]==0) { if(dis[j]<t) { t=dis[j]; pos=j 阅读全文
posted @ 2011-05-20 19:30 枫叶飘泪 阅读(329) 评论(4) 推荐(1)