POJ 2253 最短路径变形

//11108024	c00h00g	2253	Accepted	720K	0MS	G++	1360B	2012-12-14 11:50:30
//输出lf会wa
//题意:从起点到终点会有很多路径,每条路径上的边有一个最大值,求这些最大值中的最小值 
//算法过程,每次寻找最小的d值,然后如果d[j]>max(d[v],mat[v][j]),则更新d[j]=max(d[v],mat[v][j])
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;


double mat[205][205];
struct Node{
    int x,y;
};
Node stone[205];
int n;
double d[205];
int vis[205];
int cases=0;

int main(){
    while(scanf("%d",&n)!=EOF){
        if(n==0)
            break;
        cases++;
        for(int i=0;i<n;i++)
           scanf("%d%d",&stone[i].x,&stone[i].y);
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++){
                mat[i][j]=sqrt((stone[i].x-stone[j].x)*(stone[i].x-stone[j].x)+(stone[i].y-stone[j].y)*(stone[i].y-stone[j].y));
            }
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
            d[i]=mat[0][i];
        vis[0]=1;
    
        for(int i=0;i<n-2;i++){
            //查找最小值
            double minF=999999999;
            int v=-1;
            for(int j=1;j<n;j++){
                if(d[j]<minF&&vis[j]==0){
                    minF=d[j];
                    v=j;
                }
            }
            vis[v]=1;
            for(int j=1;j<n;j++){
                if(vis[j]==0&&d[j]>max(d[v],mat[v][j])){
                    d[j]=max(d[v],mat[v][j]);
                }
            }
        }
        printf("Scenario #%d\n",cases);
        printf("Frog Distance = %.3f\n\n",d[1]);
    }   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值