HDU1599最小环权值,floyd

来源:互联网 发布:质量数据分析 软件 编辑:程序博客网 时间:2024/05/21 10:05
原题http://acm.hdu.edu.cn/showproblem.php?pid=1599
#include <stdio.h>#include <algorithm>#include <iostream>using namespace std;#define maxn 9999999//开始的时候是999999999就一直wa。。。#define arr 105int n,m,dis[arr][arr];//dis[][]保存可以到达的最短距离,会变化int g[arr][arr];//g[][]保存图的信息,不做变化void Floyd(){int i,j,k,ans=maxn;//for(i=1;i<=n;i++){//for(j=1;j<=n;j++){//dis[i][j] = g[i][j];//}//}for(k=1;k<=n;k++){for(i=1;i<=k;i++){for(j=1;j<i;j++){if(dis[i][j]+g[i][k]+g[k][j]<ans){ans = dis[i][j]+g[i][k]+g[k][j];}}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(dis[i][j] > dis[i][k]+dis[k][j]){dis[i][j] = dis[i][k]+dis[k][j];}//不断更新两点之间的最短距离}}}if(ans == maxn){printf("It's impossible.\n");}else{printf("%d\n",ans);}}int main(){int i,j,c;while(~scanf("%d%d",&n,&m)){for(i=1;i<=n;i++){for(j=1;j<=n;j++){g[i][j] = maxn;}}while(m--){scanf("%d%d%d",&i,&j,&c);if(c < g[i][j]){g[i][j] = c;g[j][i] = c;}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){dis[i][j] = g[i][j];//初始化两点之间的最短距离}}Floyd();}return 0;}

0 0
原创粉丝点击