HDU 3790 最短路径问题
2016-05-24 16:06
337 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790
题目大意:就是找出最短路经同时输出最短路经所对应的花费,若有多个最短路径输出花费较少的路径。
思路:就是定义两个二维数组,一个用来储存最短路径,一个用来储存花费。然后找出你最短路经,将最短路径的每条路的花费相加即可。
具体代码:
题目大意:就是找出最短路经同时输出最短路经所对应的花费,若有多个最短路径输出花费较少的路径。
思路:就是定义两个二维数组,一个用来储存最短路径,一个用来储存花费。然后找出你最短路经,将最短路径的每条路的花费相加即可。
具体代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<climits> #include<queue> #include<algorithm> using namespace std; const int INF=0x3f3f3f3f; const int Max=1005; int map[Max][Max],vis[Max],dis[Max],money[Max],price[Max][Max]; int i,j; int s,t; int n,m; void Dijkstar()//迪杰斯特拉的方法 { memset(vis,0,sizeof(vis)); int pos=s; vis[pos]=1; for(i=1; i<=n; i++) { dis[i]=map[pos][i]; money[i]=price[pos][i]; }//初始化距离和花费 for(i=0; i<n-1; i++) { int min=INF; for(j=1; j<=n; j++) { if(vis[j]==0&&dis[j]<min) { min=dis[j]; pos=j; } }//找出最短路径 vis[pos]=1; for(j=1; j<=n; j++) { if(map[pos][j]<INF&&vis[j]==0) { if(dis[j]>dis[pos]+map[pos][j]) { dis[j]=dis[pos]+map[pos][j]; money[j]=money[pos]+price[pos][j]; }/更新dis数组,同时更新money数组 else if(dis[j]==dis[pos]+map[pos][j]&&money[j]>money[pos]+price[pos][j])//相同时选择花费较小的路径 { money[j]=money[pos]+price[pos][j]; } } } } } int main() { while(~scanf("%d%d",&n,&m)&&(n+m)) { int a,b,d,p; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { map[i][j]=INF; price[i][j]=INF; } }//初始化map,和price数组 for(i=1; i<=m; i++) { scanf("%d%d%d%d",&a,&b,&d,&p);//这里没有用cin读入,学长说用cin读入运行的慢会超时,而用scanf读入会避免超时 if(d<map[a][b]) { map[a][b]=map[b][a]=d; price[a][b]=price[b][a]=p; } else if(d==map[a][b]&&p<price[a][b]) { price[a][b]=price[b][a]=p; } } cin>>s>>t; Dijkstar(); printf("%d %d\n",dis[t],money[t]); } return 0; }
相关文章推荐
- 详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)
- python编写的最短路径算法
- 【算法】最短路径之A*搜索
- Dijkstra和floyd——求单源点最短路径
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- poj 1511 Invitation Cards
- 最少步数BFS
- 想讨论一个指定必经节点求最短路径思路,大伙有什么思路没有?
- Six Degrees of Cowvin Bacon(最短路径floyd算法)
- 关于N*N方格从(1,1)到(N,N)的最短距离
- 最短路径问题迪杰斯特拉(Dijkstra)Android 测试
- HUD----3790最短路径问题
- dijkstra_最短路径_hdu_3790
- poj_1135_最短路径&枚举
- hdu1874 最短路径 畅通工程续
- arcgis for android 短路径分析 查找最短路径
- 单源最短路径 : Bellman-Ford 算法
- 每对顶点的最短路径 : 基本算法
- 每对顶点的最短路径 : Johnson 算法
- 遗传算法染色体变长编码的实现