码迷,mamicode.com
首页 > 其他好文 > 详细

poj1734

时间:2015-08-19 20:35:56      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

链接:点击打开链接

题意:从中找出一个最短成环的路线,输出这个路线

代码:

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#define maxx 99999999
using namespace std;
int n,m,t;
int dis[105][105],w[105][105],pre[105][105],path[105];
int floyd(){
    int i,j,k,p,x;
    x=maxx;
    for(k=1;k<=n;k++){
        for(i=1;i<k;i++)
        for(j=i+1;j<k;j++)
        if(x>dis[i][j]+w[j][k]+w[k][i]){
            x=dis[i][j]+w[j][k]+w[k][i];
            p=j;
            t=0;
            while(p!=i){                        //用path数组记录路径,pre数组记录j的前一个是什么
                path[t++]=p;                    
                p=pre[i][p];
            }
            path[t++]=i;
            path[t++]=k;                        //最后不要忘记j的前面还有i和k
        }
        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];
        pre[i][j]=pre[k][j];                    //更新j的pre数组值
        }                                       //floyd算法模板
    }
    if(x<maxx)
    return 1;
    else
    return 0;                                   //如果没有返回0
}
int main(){
    int i,j,a,b,c,temp;
    while(scanf("%d%d",&n,&m)!=EOF){
        for(i=1;i<=n;i++)
        for(j=1;j<=n;j++){
            dis[i][j]=w[i][j]=maxx;
            pre[i][j]=i;                        //初始化pre数组
        }
        for(i=1;i<=m;i++){
            scanf("%d%d%d",&a,&b,&c);
            if(c<dis[a][b]){                    //要考虑重边
                dis[a][b]=dis[b][a]=c;
                w[a][b]=w[b][a]=c;
            }
        }
        temp=floyd();
        if(temp){
            for(i=0;i<t;i++)
            printf("%d ",path[i]);
            printf("\n");
        }
        else
        printf("No solution.\n");
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

poj1734

标签:

原文地址:http://blog.csdn.net/stay_accept/article/details/47784473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!