【求最小代价环floyd】POJ 1734
2012-02-10 15:17
288 查看
#define N 110 int g ; int dis ; int ans ; int p ;//记录i——j之间的路径 int n,m; int minm; int cnt; int mid; void floyd(){ int i,j,k; 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[j][k]<minm){ minm = dis[i][j]+g[i][k]+g[j][k]; cnt = 0; mid = j; while(mid != i){ ans[cnt++] = mid; mid = p[i][mid]; } ans[cnt++] = i; ans[cnt++] = k; } } } //求最短路 for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(dis[i][k]+dis[k][j]<dis[i][j]){ dis[i][j] = dis[i][k]+dis[k][j]; p[i][j] = p[k][j]; } } } } } int main(){ while(scanf("%d%d",&n,&m) != -1){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ g[i][j] = MAX; dis[i][j] = MAX; p[i][j] = i; } g[i][i] = dis[i][i] = 0; } while(m--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(c < g[a][b]){ g[a][b] = g[b][a] = c; dis[a][b] = dis[b][a] = c; } } minm = MAX; floyd(); if(minm == MAX)puts("No solution."); else { for(i=0;i<cnt;i++) puts(""); } } return 0; }
相关文章推荐
- POJ 1734 Sightseeing trip【floyd求最小环+记录路径】
- POJ-1734 Sightseeing trip (无向图最小环[Floyd])
- poj 1734 Sightseeing trip(floyd求最小环并输出方案)
- floyd 求最小环 poj 1734
- poj 1734 Floyd算求有向图的最小环
- poj 1734 Sightseeing trip 求最小代价环
- poj 1734 Floyd输出路径(长度大于等于3的最小圈)
- 【Floyd求最小环 && 保存路径】POJ - 1734 Sightseeing trip
- poj 1734 Sightseeing trip 扩展floyd求最小环
- POJ 1734 Sightseeing trip Floyd求最小环
- poj 1734 Sightseeing trip (floyd求最小环并记录路径)
- POJ 1734 Sightseeing trip(最小环-floyd)
- POJ 1734 Sightseeing trip Floyd求最小环
- POJ 1734 Sightseeing trip (floyd 求最小环)
- poj 1734 (floyd求最小环并打印路径)
- POJ 1734 - Sightseeing trip 用Floyd找无向图的最小环
- POJ 1734 Sightseeing trip (Floyd 最小环+记录路径)
- 【POJ】1734 Sightseeing trip floyd最小环
- poj 1734 Sightseeing trip(floyd 拓展 求最小环)
- floyd 求最小环 poj 1734