zoukankan      html  css  js  c++  java
  • POJ 1734

    #include<iostream>
    #include<stdio.h>
    #define MAXN 105
    #define inf 123456789
    using namespace std;
    
    int _m[MAXN][MAXN];
    int floy[MAXN][MAXN];
    int pre[MAXN][MAXN];
    int ans[MAXN];
    int n;
    int num;
    void floyd();
    int main()
    {
        //freopen("acm.acm","r",stdin);
        int m;
        int u;
        int v;
        int i;
        int j;
        int len;
        memset(_m,0,sizeof(_m));
        memset(pre,-1,sizeof(pre));
        cin>>n>>m;
        for(i = 0; i < n; ++ i)
        {
            for(j = 0; j <n; ++ j)
            {
                floy[i][j] = inf;
                floy[j][i] = inf;
            }
            floy[i][i] = 0;
        }
    
        for(i = 0; i < m; ++ i)
        {
            cin>>u>>v>>len;
            -- u;
            -- v;
            if(floy[u][v] > len)
            {
                _m[u][v] = _m[v][u] = len;
                floy[u][v] = floy[v][u] = len;
                pre[u][v] = v;
                pre[v][u] = u;
            }
    
        }
        floyd();
        if(num == 0)
        {
            cout<<"No solution."<<endl;
        }
        else
        {
            for(i = 0; i < num; ++ i)
            {
                cout<<ans[i]+1<<" ";
            }
            cout<<endl;
        }
    }
    
    void floyd()
    {
        int k;
        int i;
        int j;
        int min = inf;
        int temp;
        num = 0;
        for(k = 0; k < n; ++ k)
        {
            for(i = 0; i < k; ++ i)
            {
                for(j = 0; j < k; ++ j)
                {
                    if(_m[i][k] && _m[k][j] && i != j)
                    {
                        if(_m[i][k] + _m[k][j] + floy[i][j] < min)
                        {
                            min = _m[i][k] + _m[k][j] + floy[i][j];
                            ans[0] = k;
                            num = 1;
                            int p = i;
                            while(p != -1)
                            {
                                ans[num ++] = p;
                                p = pre[p][j];
                                //    cout<<"00000000000"<<endl;
                            //    cout<<p<<endl;
                            }
                        //    return ;
                        }
                    }
                }
            }
            
            for(i = 0; i < n; ++ i)
            {
                for(j = 0; j < n; ++ j)
                {
                    if(floy[i][k] + floy[k][j] < floy[i][j])
                    {
                        floy[i][j] = floy[i][k] + floy[k][j];
                        pre[i][j] = pre[i][k];
                    }
                }
            }
        }
    
    
    }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    浮动与浮动的清除
    【最全】经典排序算法(C语言)
    Python类中的self到底是干啥的
    浅析Python3中的bytes和str类型
    Shell十三问[转]
    VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容
    C语言运算符优先级
    mysql主要性能监控指标
    sql 优化
    npm install安装时忘记--save解决方法
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4566528.html
Copyright © 2011-2022 走看看