zoukankan      html  css  js  c++  java
  • 杭电 1596 find the safest road (最短路)

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

    这道题目与杭电2544最短路的思想是一样的。仅仅只是是把+改成了*,输入输出有些不一样而已。

    find the safest road

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 6985    Accepted Submission(s): 2475


    Problem Description
    XX星球有非常多城市,每一个城市之间有一条或多条飞行通道,可是并非全部的路都是非常安全的。每一条路有一个安全系数s,s是在 0 和 1 间的实数(包含0。1),一条从u 到 v 的通道P 的安全度为Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 。如今8600 想出去旅游。面对这这么多的路。他想找一条最安全的路。可是8600 的数学不好,想请你帮忙 ^_^
     

    Input
    输入包含多个測试实例,每一个实例包含:
    第一行:n。n表示城市的个数n<=1000;
    接着是一个n*n的矩阵表示两个城市之间的安全系数,(0能够理解为那两个城市之间没有直接的通道)
    接着是Q个8600要旅游的路线,每行有两个数字,表示8600所在的城市和要去的城市

    Output
    假设86无法达到他的目的地。输出"What a pity!",
    其它的输出这两个城市之间的最安全道路的安全系数,保留三位小数。

     
    Sample Input
    3 1 0.5 0.5 0.5 1 0.4 0.5 0.4 1 3 1 2 2 3 1 3
     

    Sample Output
    0.500 0.400 0.500
     AC代码:
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    double map[1010][1010],d[1010];
    int v[1010];
    int a,b,n;
    void Dijkstra(int s)
    {
        int i,p,j;
        double min=0;
        for (i=1; i<=n; i++)
        {
            d[i]=map[s][i]; 
            v[i]=0;
        }
        v[s]=1;
        for (i=1; i<n; i++)
        {
            min=0;
            for (j=1; j<=n; j++)
            {
                if(!v[j] && d[j]>min)
                {
                    p=j;
                    min=d[j];
                }
            }
            v[p]=1;
        if(min==0)break;
            for (j=1; j<=n; j++)
            {
                if(!v[j] && d[p]*map[p][j]>d[j])
                {
                    d[j]=d[p]*map[p][j];
                }
            }
        }
    }
    int main()
    {
        int m,i,j;
        while(~scanf("%d",&n))
        {
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=n; j++)
                {
                    scanf("%lf",&map[i][j]);
                }
            }
            scanf("%d",&m);
            for(i=0; i<m; i++)
            {
                scanf("%d%d",&a,&b);
                Dijkstra(a);
                if(d[b]==0)
                    printf("What a pity!
    ");
                else
                    printf("%.3lf
    ",d[b]);
            }
        }
        return 0;
    }
    




  • 相关阅读:
    用Groovy处理JMeter变量
    用Groovy处理JMeter断言和日志
    选择手动测试还是自动化测试?
    从单元测试标准中学习
    利用ThreadLocal解决线程同步问题
    JSON基础
    Java中interface属性和实例方法
    集成测试、单元测试、系统测试
    异步查询转同步加redis业务实现的BUG分享
    《深入理解java虚拟机》读书笔记三——第四章
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6813453.html
Copyright © 2011-2022 走看看