hdu 1596 floyd算法

//4000多MS过的,数据应该比较大,还是比较简单的
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1001;

int n;
float G[maxn][maxn];
float Dist[maxn][maxn];
int Q;
int from,to;

int main()
{
    while(cin>>n)
    {
          
          for(int i = 0; i < n; i++)
          {
                for(int j = 0; j < n; j++)
                {
                      cin>>G[i][j];
                }
          }
          //初始化Dist 
          for(int i = 0; i < n; i++)
          {
                for(int j = 0; j < n; j++)
                {
                       Dist[i][j] = G[i][j];
                }
          }
          //Floyd算法 
          for(int k = 0; k < n; k++)
          {
                 for(int i = 0; i < n; i++)
                 {
                         for(int j = 0; j < n; j++)
                         {
                                 if(Dist[i][j] < Dist[i][k] * Dist[k][j])
                                 {
                                       Dist[i][j] = Dist[i][k] * Dist[k][j];
                                 }
                                 //注意是乘而不是加,还有大小 
                         }
                 }
          }
          cin>>Q;
          for(int i = 0; i < Q; i++)
          {
                 cin>>from>>to;
                 if(Dist[from-1][to-1] != 0)
                 {
                       printf("%.3f\n",Dist[from-1][to-1]);
                 } 
                 else
                     cout<<"What a pity!"<<endl;
          }
          
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值