floyd算法,把加法改成乘法,每次记录最大值就行了,还是输出格式。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f
#define MAXN 1005
using namespace std;
int n;
double pri[MAXN][MAXN];
void floyd(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
pri[j][k]=max(pri[j][k],pri[j][i]*pri[i][k]);
}
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&pri[i][j]);//直接赋值
floyd();
int q,x,y;
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d%d",&x,&y);
if(pri[x][y]==0)
printf("What a pity!\n");
else
printf("%.3lf\n",pri[x][y]);
}
}
return 0;
}
本文介绍了一个使用Floyd算法变种解决的问题,即在一个带有安全系数的图中找到两点间最安全的路径。通过将Floyd算法中的加法操作替换为乘法,并记录每一步的最大值,从而高效地解决了该问题。
904

被折叠的 条评论
为什么被折叠?



