1596 最短路径的变形

题目:

 

回顾一下。。

直接用dijkstra算法。。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
double G[1010][1010];//二维数组的存储
int n,s,t;//

void dijkstra(int s,int t)
{
     bool vis[1010];
     double dis[1010];//保存最安全路径;
     int i,j,k;
     
     for(int i=1;i<=n;i++)
          dis[i]=G[s][i];
     memset(vis,false,sizeof(vis));
     dis[s]=0;
     vis[s]=true;
     for(i=1;i<n;i++)
     {
          k=-1;
          for(j=1;j<=n;j++)
          {
               if(!vis[j]&&(k==-1||dis[k]<dis[j]))
                    k=j;
          }
          if(k==-1)      //图不连通
               break;
          vis[k]=true;
          for(j=1;j<=n;j++)
               if(!vis[j]&&dis[j]<dis[k]*G[k][j])
                    dis[j]=dis[k]*G[k][j];
     }
     if(dis[t])
          printf("%.3lf\n",dis[t]);
     else
          printf("What a pity!\n");
}
int main()
{
     while(~scanf("%d",&n))
     {
          int x;
          for(int i=1;i<=n;i++)
          {
               for(int j=1;j<=n;j++)
               {
                    scanf("%lf",&G[i][j]);
               }
          }
          scanf("%d",&x);
          while(x--)
          {
               scanf("%d%d",&s,&t);
               dijkstra(s,t);
          }
     }
     return 0;
}
               

 

posted on 2016-05-17 16:49  青春的梦想付诸行动  阅读(123)  评论(0编辑  收藏  举报

导航