zoukankan      html  css  js  c++  java
  • poj 1734 Sightseeing trip 夜

    http://poj.org/problem?id=1734

    比着别人的代码写的 自己对floyd的理解还是不深刻呀 

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<string>
    #include<vector>
    #include<set>
    #include<queue>
    #include<stack>
    #include<cmath>
    #define LL long long
    
    using namespace std;
    
    const int N=105;
    const int INF=0x0f3f3f3f;
    int d[N][N];
    int dist[N][N];
    int f[N][N];
    int path[N];
    int main()
    {
        //freopen("data.txt","r",stdin);
        int n,m;
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
            {
                d[i][j]=dist[i][j]=INF;
                f[i][j]=i;
            }
            while(m--)
            {
                int i,j,x;
                scanf("%d %d %d",&i,&j,&x);
                d[i][j]=d[j][i]=dist[i][j]=dist[j][i]=min(d[i][j],x);
            }
            int MIN=INF;
            int I;
            for(int l=1;l<=n;++l)
            {
                for(int i=1;i<l;++i)//l 也可以换成n 还是不理解呀
                {
                    for(int j=i+1;j<l;++j)//l 也可以换成n 还是不理解呀
                    {
                        int temp=dist[i][j]+d[i][l]+d[l][j];
                        if(temp<MIN)
                        {
                            MIN=temp;
                            I=0;
                            int k=j;
                            do{
                                path[I++]=k;
                                k=f[i][k];
                            }while(k!=i);
                            path[I++]=i;
                            path[I++]=l;
                        }
                    }
                }
                for(int i=1;i<=n;++i)
                {
                    for(int j=1;j<=n;++j)
                    {
                        if(dist[i][l]+dist[l][j]<dist[i][j])
                        {
                            dist[i][j]=dist[i][l]+dist[l][j];
                            f[i][j]=f[l][j];
                        }
                    }
                }
            }
            if(MIN==INF)
            {
                printf("No solution.\n");
                continue;
            }
            for(int i=0;i<I;++i)
            {
                if(i)
                printf(" ");
                printf("%d",path[i]);
            }
            printf("\n");
        }
        return 0;
    }
    

      

  • 相关阅读:
    phonegap ios插件开发及无限后台运行解决
    iOS JSON解析
    ios上取得设备唯一标志的解决方案
    为iOS7重新设计你的App
    iOS多线程GCD 研究
    自定义用户环境
    启用SELinux保护
    shell编写一个批量添加用户脚本
    shell编写一个判断脚本
    shell使用特殊变量
  • 原文地址:https://www.cnblogs.com/liulangye/p/2645766.html
Copyright © 2011-2022 走看看