hdu3790 最短路径问题
2018-03-25 19:23
387 查看
Description
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。Input
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。(1<n<=1000, 0<m<100000, s != t)
Output
输出 一行有两个数, 最短距离及其花费。Sample Input
3 21 2 5 6
2 3 4 5
1 3
0 0
Sample Output
9 11AC Code
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> #include <string.h> #include <algorithm> #include <math.h> #include <limits.h> #include <queue> #include <time.h> #define inf 0x3f3f3f3f #define maxn 1010 #define MOD 50000 using namespace std; const double pi=acos(-1.0),ee=2.7182818284590452354; int e[maxn][maxn][2],book[maxn],dis[maxn][2]; int main(int argc, char** argv) { int n,m; while(cin>>n>>m,n+m){ int i,j,s,t; memset(book,0,sizeof(book)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i==j) e[i][j][0]=e[i][j][1]=0; else e[i][j][0]=e[i][j][1]=inf; } for(i=1;i<=m;i++) { int a,b,d,p; scanf("%d%d%d%d",&a,&b,&d,&p); if(e[a][b][0]>=d) { if(e[a][b][0]>d) { e[a][b][0]=e[b][a][0]=d; e[a][b][1]=e[b][a][1]=p; } else if(e[a][b][1]>p) e[a][b][1]=p; } } cin>>s>>t; for(i=1;i<=n;i++) { dis[i][0]=e[s][i][0]; dis[i][1]=e[s][i][1]; } book[s]=1; for(i=1;i<n;i++) { int min=inf,id; for(j=1;j<=n;j++) { if(book[j]==0&&dis[j][0]<min) { min=dis[j][0]; id=j; } } book[id]=1; for(j=1;j<=n;j++) { if(dis[j][0]>dis[id][0]+e[id][j][0]) { dis[j][0]=dis[id][0]+e[id][j][0]; dis[j][1]=dis[id][1]+e[id][j][1]; } else if(dis[j][0]==dis[id][0]+e[id][j][0]) if(dis[j][1]>dis[id][1]+e[id][j][1]) dis[j][1]=dis[id][1]+e[id][j][1]; } } cout<<dis[t][0]<<' '<<dis[t][1]<<endl; } return 0; }
相关文章推荐
- hdu3790最短路径问题
- hdu3790 最短路径问题<最短路>
- HDU3790-最短路径问题(dijkstra算法)
- 最短路径问题(hdu3790,Dijstra)
- hdu3790 - 最短路径问题 (Dijkstra)(多条最短路径找花费最少的一条)
- hdu3790 最短路径问题 dijstra
- hdu3790 最短路径问题
- hdu3790 最短路径问题(Dijkstra)
- HDU3790 最短路径问题+dij算法
- hdu3790最短路径问题(BFS+优先队列)
- 【练习赛补题】问题 D: 最短路径问题 hdu3790【dfs】
- HDU3790:最短路径问题(Dijkstra)
- HDU3790 最短路径问题
- hdu3790 最短路径问题
- [hdu3790]最短路径问题
- HDU3790 最短路径问题 Dijkstra算法
- hdu3790 最短路径问题(Dijkstra)
- hdu3790最短路径问题
- HDU3790:最短路径问题
- HDU3790最短路径问题---DIjkstra