Minimum Transport Cost Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
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
# include <stdio.h> # include <stdlib.h> #define INF 1 << 20 int dis[10005]; int p[10005][1005]; int map[10005][10005]; int mag[10005]; int n; void floyd() { int i,j,k; for(k=1; k<=n; k++) { for(i=1;i<=n;i++) { if( i == k || map[i][k]==-1 ) continue; for(j=1;j<=n;j++) { if( k == j || i == j || map[k][j] == -1 ) continue; int t = map[i][k] + map[k][j] + mag[k]; if(map[i][j] == -1 || map[i][j] > t) { map[i][j] = t; p[i][j] = p[i][k]; } else if(map[i][j]==t && p[i][k]<p[i][j]) { p[i][j]=p[i][k]; } } } } } void pr(int x,int y) { printf("Path: %d",x); while(p[x][y]!=y) { printf("-->%d",p[x][y]); x=p[x][y]; } printf("-->%d\n",y); } int main() { int kai,jie; while(scanf("%d",&n)!=EOF&&n!=0) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&map[i][j]); p[i][j]=j; } for(int i=1;i<=n;i++) scanf("%d",&mag[i]); floyd(); while(scanf("%d%d",&kai,&jie)!=EOF&&kai!=-1&&jie!=-1) { printf("From %d to %d :\n",kai,jie); if(kai!=jie) { pr(kai,jie); printf("Total cost : "); printf("%d\n",map[kai][jie]); printf("\n"); } else { printf("Path: %d\n",kai); printf("Total cost : "); printf("0\n"); printf("\n"); } } } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。