您好,登錄后才能下訂單哦!
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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。