POJ 2253 Frogger(dij)

POJ 2253 Frogger(dij)_第1张图片 POJ 2253 Frogger(dij)_第2张图片

有两只青蛙,分别在第 1,2,个位子上,其他的位子都是石头,现在青蛙 1 出发找 2,但是他的体力有限,所以要求你寻找一条路径,使得能够到达 2 号点 且 相邻的两块石头的最大距离尽可能的短

将 d 数组表示为从原点 1 到达任意一点 i 的中间任意两块石头的最大距离的最小值 

const int N=200+5;
 
    int n,m,t;
    int i,j,k;
    double d[N];//源点到任一点 i 的最长距离
    double f[N][N];
    bool vis[N];

int x[N],y[N];
double dis(int a,int b)
{
    double xx=x[a]-x[b];
    double yy=y[a]-y[b];
    return sqrt(xx*xx+yy*yy);
}    

void Dijkstra(int s)
{
    for(int i=1;i<=n;i++){
        d[i]=f[s][i];
        vis[i]=0;
    }
    for(int i=1;i<=n;i++){
        int tag=-1;
        double minn=inf*1.0;
        for(int j=1;j<=n;j++){
            if(!vis[j] && minn>d[j]){
                tag=j;
                minn=d[j];
            }
        }
        if(tag==-1) continue;
        vis[tag]=1;
        for(int j=1;j<=n;j++){
            double maxx=max(d[tag],f[tag][j]);
            if(maxx

 

你可能感兴趣的:(#,最短路径算法,POJ)