Poj2253 dijkstra最短路变形

题意:求1点到2点的所有能够到2点的所有通路里的的最大路径(这里的路径特指两点之间的线段)的最小值。

这题对我来说收获颇丰,我们可以修改dijkstra里面的松弛函数,使得其变为求每个点的满足条件的值,并用dist数组来记录。详见代码。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define INF 0x3f3f3f3f
#define INF2 -0x3f3f3f3f
typedef struct Node
{
    double x;
    double y;
};
Node nodes[205*2];
typedef struct Egde
{
    int l;
    int r;
    double value;
};
double a[205*2][205*2];
double dist[205*2];
bool visited[205*2];
int n,sx,sy,ex,ey;
double Max;
void dijkstra()
{

    visited[1]=true;
    for(int i=1; i<=n; i++)
    {
        dist[i]=a[1][i];
    }
    for(int i=1; i<=n; i++)
    {
         int Min=INF,node=0;
        for(int j=1; j<=n; j++)
        {
            if(!visited[j]&&Min>dist[j])
            {
                Min=dist[j];
                node=j;
            }
        }
        if(node==0)
            return;
        visited[node]=true;


        for(int j=1; j<=n; j++)
        {

            Max=max(dist[node],a[node][j]);//构成dist[node]和a[node][j]里找最大的边,因为这两条边来构成一条新的dist[j]
            //用为要去最大边里的最小边,那么我们就要把它和原来的dist[j]进行比较
            //再把较小的边赋给dist[j]来成为新的dist[j]以便进行下次更新            dist[j]=min(dist[j],Max);
            dist[j]=min(dist[j],Max);
        }
    }


}
int main()
{
    int sym=0;
    while(scanf("%d",&n)&&n!=0)
    {
        sym++;
        memset(nodes,0,sizeof(nodes));
        memset(a,0x3f,sizeof(a));
        memset(dist,0x3f,sizeof(dist));
        memset(visited,false,sizeof(visited));
        for(int i=1; i<=n; i++)
        {
            scanf("%lf%lf",&nodes[i].x,&nodes[i].y);
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=i+1; j<=n; j++)
            {
                double d=sqrt((nodes[i].x-nodes[j].x)*(nodes[i].x-nodes[j].x)+(nodes[i].y-nodes[j].y)*(nodes[i].y-nodes[j].y));
                a[i][j]=a[j][i]=d;
                a[i][i]=0;
            }
        }

        Max=INF;
        dijkstra();
        printf("Scenario #%d\n",sym);
        printf("Frog Distance = %.3f\n\n",dist[2]);
    }


    return 0;

}


 

 

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/huyifan1/article/details/84811975
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞