杭电 1596 find the safest road

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

double dis[1010],map[1010][1010];

int hash[1010];

int n,a,b;

void dijkstra()

{

    for(int i=1;i<=n;i++)

    {

       hash[i]=0;

       dis[i]=0;

    }//前面吧这部分内容放到了主函数里面,结果不对。 

    dis[a]=1;

    for(int i=1;i<=n;i++)

    {

       double max=-1;

       int pos;

        for(int j=1;j<=n;j++)

        {

            if(hash[j]==0)

            {

                if(dis[j]>max)

                {

                    max=dis[j];

                    pos=j;

                }

            }

        }

        hash[pos]=1;

        if(pos==b) break;

        for(int j=1;j<=n;j++)

        {

            if(hash[j]==0)

            {

                if(map[pos][j]!=0)

                {

                    if(dis[pos]*map[pos][j]>dis[j])

                    {

                        dis[j]=map[pos][j]*dis[pos];

                    }

                }

            }

        }

    }

}

int main()

{

    while(scanf("%d",&n)!=EOF)

    {

        for(int i=1;i<=n;i++)

        {

            for(int j=1;j<=n;j++)

            {

                map[i][j]=0;

            }

        }

        for(int i=1;i<=n;i++)

        {

            for(int j=1;j<=n;j++)

            {

                scanf("%lf",&map[i][j]);

            }

        }

        int q;

        scanf("%d",&q);

        while(q--)

        {

            scanf("%d%d",&a,&b);

            dijkstra();

            if( dis[b]!=0)

            {

                printf("%.3lf\n",dis[b]);

            }

            else

            {

                printf("What a pity!\n");

            }

        }

    }

    //system("pause");

    return 0;

}

编辑器加载中...

你可能感兴趣的:(find)