zoukankan      html  css  js  c++  java
  • HDU1595 find the longest of the shortest dijkstra+记录路径

    AC代码

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    
    int book[1010],dist[1010],e[1010][1010],pre[1010];
    int n,m;
    bool flag;
    
    void dijkstra()
    {
        for(int i=1; i<=n; i++)
        {
            //dist[i]=e[1][i];
            dist[i]=inf;
            book[i]=0;
        }
        //book[1]=1;
        dist[1]=0;
        int u;
        for(int i=2; i<=n; i++)
        {
            int minn=inf;
            for(int j=1; j<=n; j++)
            {
                if(book[j]==0&&minn>dist[j])
                {
                    u=j;
                    minn=dist[j];
                }
            }
            if(minn==inf)
                break;
            book[u]=1;
            for(int j=1; j<=n; j++)
            {
                if(book[j]==0&&e[u][j]<inf)
                {
                    if(dist[u]+e[u][j]<dist[j])
                    {
                        dist[j]=dist[u]+e[u][j];
                        if(flag==0)
                            pre[j]=u;
                    }
                }
            }
        }
    }
    
    int main()
    {
        while(cin>>n>>m)
        {
            for(int i=1; i<=n; i++)
            {
                pre[i]=-1;
                for(int j=1; j<=n; j++)
                {
                   
                    if(i==j)
                        e[i][j]=0;
                    else
                        e[i][j]=inf;
                }
            }
            for(int i=1; i<=m; i++)
            {
                int a,b,c;
                cin>>a>>b>>c;
                e[a][b]=e[b][a]=min(e[a][b],c);
            }
            flag=0,dijkstra();
            flag=1;
            int x=dist[n];
          //  pre[1]=1;
            for(int i=n; i!=-1; i=pre[i])
            {
                int t=e[i][pre[i]];
                e[i][pre[i]]=e[pre[i]][i]=inf;
                dijkstra();
                if(dist[n]!=inf)
                    x=max(x,dist[n]);
                e[i][pre[i]]=e[pre[i]][i]=t;
            }
            cout<<x<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    面对对象1
    php数组
    操作字符串,正则表达式
    php运算符and函数
    sql 数学函数and字符串函数and日期函数
    高级查询
    简单查询
    php环境搭建
    第三阶段项目错误记录
    thinkphp获取刚添加数据的主键值
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11514781.html
Copyright © 2011-2022 走看看