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;
    }
  • 相关阅读:
    ssh协议运用
    linux系统安装oracle遇到的问题
    Qt中mysql编译出错问题
    winform控件添加鼠标事件
    Linux网络编程
    多线程
    守护进程
    openssl 生成自签CA和pkcs12证书
    Linux CPU使用率获取 c
    temp
  • 原文地址:https://www.cnblogs.com/kimsimple/p/6607963.html
Copyright © 2011-2022 走看看