Hdu1385 Minimum Transport Cost (disjtra)
来源:互联网 发布:php字符串查找 编辑:程序博客网 时间:2024/06/06 17:20
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 865 Accepted Submission(s): 211
Problem Description
These are N cities in Spring country. Between each pair of cities there may be on
The cost of the transportation on the path between these cities, and
a certain tax which will be charged whenever any cargo passing through on
You must write a program to find the route which has the minimum cost.
Input
First is N, number of cities. N = 0 indicates the end of input.
The da
a11 a12 ... a1N
a21 a22 ... a2N
...............
aN1 aN2 ... aNN
b1 b2 ... bN
c d
e f
...
g h
where aij is the transport cost from city i to city j, aij = -1 indicates there is no direct path between city i and city j. bi represents the tax of passing through city i. And the cargo is to be delivered from city c to city d, city e to city f, ..., and g = h = -1. You must output the sequence of cities passed by and the total cost which is of the form:
Output
From c to d :
Path: c-->c1-->......-->ck-->d
Total cost : ......
......
From e to f :
Path: e-->e1-->..........-->ek-->f
Total cost : ......
Note: if there are more minimal paths, output the lexically smallest on
Sample Input
5
0 3 22 -1 4
3 0 5 -1 -1
22 5 0 9 20
-1 -1 9 0 4
4 -1 20 4 0
5 17 8 3 1
1 3
3 5
2 4
-1 -1
0
Sample Output
From 1 to 3 :
Path: 1-->5-->4-->3
Total cost : 21
From 3 to 5 :
Path: 3-->4-->5
Total cost : 16
From 2 to 4 :
Path: 2-->1-->5-->4
Total cost : 17
Source
Asia 1996, Shanghai (Mainland China)
分析:dijkatra最短路记录路径就行。我本以为dijkstra算出来就是字典序因为那个(i=1...n),但wa了后分析发现字典序小的路径有可能因为刚开始那段路比较长而被省略,因此需要在路径长度相同时加上字典序判断。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;const int MAXN=1005;int n,g[MAXN][MAXN],vis[MAXN],p[MAXN],dis[MAXN];void showpath(int x){if(x==-1)return ;showpath(p[x]);printf("%d-->",x);}int zid(int a,int b,int cur){int p1[MAXN],p2[MAXN],i=2,j=2;p1[0]=cur;p2[0]=cur;p1[1]=a;p2[1]=b;while(a!=-1){p1[i++]=p[a];a=p[a];}while(b!=-1){p2[j++]=p[b];b=p[b];}while(1){i--,j--;if(i<0)return p1[1];else if(j<0)return p2[1];if(p1[i]>p2[j])return p2[1];else if(p1[i]<p2[j])return p1[1];}}void dijk(int a,int b){int i,j,k;memset(vis,0,sizeof vis);for(i=1;i<=n;i++)dis[i]=g[a][i],p[i]=a;dis[a]=0;vis[a]=1;p[a]=-1;for(i=1;i<n;i++){int tmp=INF,mk;for(j=1;j<=n;j++)if(!vis[j]&&dis[j]<tmp)tmp=dis[mk=j];vis[mk]=1;for(j=1;j<=n;j++)if(!vis[j]&&dis[mk]+g[mk][j]+g[n+1][mk]<dis[j])dis[j]=dis[mk]+g[mk][j]+g[n+1][mk],p[j]=mk;else if(!vis[j]&&dis[mk]+g[mk][j]+g[n+1][mk]==dis[j])//路径冲突时选择字典序小的{p[j]=zid(p[j],mk,j);}}printf("From %d to %d :\nPath: ",a,b);showpath(p[b]);printf("%d\nTotal cost : %d\n\n",b,dis[b]);}int main(){int i,j,a,b;while(scanf("%d",&n)&&n){for(i=1;i<=n+1;i++)for(j=1;j<=n;j++){scanf("%d",&g[i][j]);if(g[i][j]==-1)g[i][j]=INF;}while(~scanf("%d%d",&a,&b)&&(a!=-1||b!=-1)){dijk(a,b);}}return 0;}
- Hdu1385 Minimum Transport Cost (disjtra)
- hdu1385 Minimum Transport Cost
- HDU1385 Minimum Transport Cost
- HDU1385 Minimum Transport Cost
- Minimum Transport Cost HDU1385
- hdu1385 Minimum Transport Cost(路径输出)
- HDU1385-Minimum Transport Cost(Dijkstra算法+Floyd算法)
- hdu1385 Minimum Transport Cost(经典字典序输出路径)
- HDU1385 Minimum Transport Cost(floyd+标记路径)
- ZOJ1456 HDU1385 Minimum Transport Cost,Dijkstra算法
- HDU1385 Minimum Transport Cost 【Floyd】+【路径记录】
- HDU1385 Minimum Transport Cost Floyd算法
- hdu1385 Minimum Transport Cost (floyd输出字典序最小的路径)
- (Floyd求最短路)Minimum Transport Cost (hdu1385)
- 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
- hdu1358 Minimum Transport Cost 按字典序输出最短路径hdu1385
- HDU1385 Minimum Transport Cost 最短路+输出路径★floyd中的路径dp
- Minimum Transport Cost(dijkstra输出路径)
- POJ 1151 HDU 1542 Atlantis(扫描线)
- [Codeforces] 218B - Airport
- HDU-#1285 确定比赛名次(拓扑排序)
- wineqq卸载及安装
- ogre部署到vs2010
- Hdu1385 Minimum Transport Cost (disjtra)
- PHP文件下载
- Android开发(准确来说ndk开发)openGL 开启depth_test 没反应
- hdu-oj 1106 排序
- 树状数组区间修改 neu1454
- Hibernate Session & Transaction详解
- sys_connect_by_path
- uva 424 Integer Inquiry (大数加法)
- 计算机网络--NetBIOS