zoukankan      html  css  js  c++  java
  • HDU1596 find the safest road---(最短路径dijkstra,#变形#)

    http://acm.hdu.edu.cn/showproblem.php?pid=1596

    分析:

    题目要找一条安全度最高的路,安全度计算方法    Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 

    在Dijkstra算法的基础上稍加改动

    #include "cstdio"
    #include "cstring"
    #include "algorithm"
    using namespace std;
    #define inf 0x3f3f3f3f
    #define MAX 1005
    double map1[MAX][MAX],dis[MAX];
    int vis[MAX];
    ///要找安全系数最高的路径
    void dijkstra(int s,int n)
    {
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)
            dis[i]=map1[s][i];
        dis[s]=0;
        vis[s]=1;
        double min1;
        int pos;
        for(int i=1;i<n;i++)
        {
            min1=0;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]&&min1<dis[j])///找最大dis
                    min1=dis[pos=j];
            }
            vis[pos]=1;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]&&dis[j]<dis[pos]*map1[pos][j])///选取更大安全度
                    dis[j]=dis[pos]*map1[pos][j];
            }
        }
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n)&&n)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    scanf("%lf",&map1[i][j]);
                }
            }
            int q,s,e;
            scanf("%d",&q);
            for(int i=0;i<q;i++)
            {
                scanf("%d%d",&s,&e);
                dijkstra(s,n);
                if(dis[e]==0)///不能到达,即安全度为0
                    printf("What a pity!
    ");
                else
                    printf("%.3lf
    ",dis[e]);
            }
        }
        return 0;
    }
  • 相关阅读:
    join
    runlevel 运行级别
    腾讯一shell试题.
    awk grep sed 的一些问题
    while read line do done < file
    awk 中 RS,ORS,FS,OFS 区别与联系
    节选
    rpm -qa -qc 查询安装过的软件
    css实现两端对齐
    JS表单验证
  • 原文地址:https://www.cnblogs.com/kimsimple/p/6607963.html
Copyright © 2011-2022 走看看