#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;
}

编辑器加载中...

posted on 2011-07-18 21:51  枫叶飘泪  阅读(179)  评论(0编辑  收藏  举报