POJ 2253 最短路径变形

来源:互联网 发布:c语言中 是什么意思 编辑:程序博客网 时间:2024/05/16 23:36
//11108024c00h00g2253Accepted720K0MSG++1360B2012-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]);    }   }

原创粉丝点击