您的位置:首页 > 其它

poj 2253 Frogger floyd 长路求权值最大边,属于简单题!!!!

2011-11-28 23:44 363 查看
刚开始做这道题的时候,一看就是floyd,果断打代码,wa了,然后就看看discuss,我去,全是dij,和prim,还有什么二分加并查集,这一下子给我整抑郁了
后来终于看见一个志同道合的,一句话一语道破啊!!!求长路中权值最大边的floyd核心公式map[i][j]=min(map[i][j],max(map[i][k],map[k][j])),我当时忘考虑和自己的map[][]比较了,改完果断A掉!!!!!!
对了,还有那个格式,输出两个空行,我理解是输入有一个空行,输出还有一个空行,不知恰不恰当
#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;

struct node
{
int x;
int y;
}a[400];
double map[405][405];
int main()
{
int n;
int t=1;
while(cin>>n,n)
{
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
map[i][j]=sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)*1.0+(a[i].y-a[j].y)*(a[i].y-a[j].y)*1.0);
if(i==j)
map[i][j]=0;
}
}
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
map[i][j]=min(map[i][j],max(map[i][k],map[k][j]));//关键所在
}
}
printf("Scenario #%d\n",t++);
printf("Frog Distance = %.3f\n\n",map[0][1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: