//hdu1596
//题目意思:在n个地点中有m条路,每条路有相应的安全系数(0~1之间)
//要求从u 到v最大的安全系数
//这里用Dijkstra解决
#include<iostream>
#include<cstdio>
using namespace std;
double map[1002][1002];
double f[1002];
bool use[1002];
int n;
void Dijkstra(int s,int end)
{
int i,j,maxj;
double max;
for(i=1;i<=n;i++)
{
f[i]=map[s][i];
}
memset(use,false,sizeof(use));
use[s]=true;
for(i=1;i<=n;i++)
{
max=0.0;
for(j=1;j<=n;j++)
{
if(!use[j]&&f[j]-max>0.0001)
{max=f[j];
maxj=j;
}
}
use[maxj]=true;
for(j=1;j<=n;j++)
{
if(!use[j]&&(map[maxj][j]*max-f[j]>0.0001))
{
f[j]=map[maxj][j]*max;
}
}
}
if(f[end])
printf("%.3lf\n",f[end]);
else printf("What a pity!\n");
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%lf",&map[i][j]);
int m,begin,end;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d%d",&begin,&end);
Dijkstra(begin,end);
}
}
return 0;
}
hdu1596 最短路
最新推荐文章于 2020-07-20 23:45:00 发布