zoukankan      html  css  js  c++  java
  • poj 2253 Frogger (最短路变种,连通图的最长边)

    题目

    这里的dijsktra的变种代码是我看着自己打的,终于把代码和做法思路联系上了,也就是理解了算法——看来手跟着画一遍真的有助于理解。

    #define  _CRT_SECURE_NO_WARNINGS
    
    #include<string.h>
    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    
    const int MAXN=210;  
    
    #define typec double  
    const typec INF=0x3f3f3f3f*1.0;//防止后面溢出,这个不能太大  
    bool vis[MAXN];  
    typec cost[MAXN][MAXN];
    typec lowcost[MAXN];
    void Dijkstra(int n,int beg)  //连通图的最小边——最短路变种
    {  
        for(int i=0;i<n;i++)
        {
            lowcost[i]=INF;vis[i]=false;
        }
        lowcost[beg]=0.0;
        for(int i=0;i<n;i++)
        {
            typec temp=INF;
            int k=-1;
            for(int j=0;j<n;j++)
            {
                if(!vis[j]&&lowcost[j]<temp)
                {
                    temp=lowcost[j];
                    k=j;
                }
            }
            vis[k]=true;
            for(int l=0;l<n;l++)
            {
                if(!vis[l])
                {
                    lowcost[l]=min(max(lowcost[k],cost[k][l]),lowcost[l]);//原来改动在这列,具体可画图求证感知
                }
            }
        }
    }  
    
    int main()
    {
        int n,i,j,id=1;
        typec a[MAXN],b[MAXN];
        while(scanf("%d",&n),n)
        {
            for(i=0;i<n;i++)
                    cost[i][i]=0;
    
            for(i=0;i<n;i++)
            {
                scanf("%lf%lf",&a[i],&b[i]);
                for(j=0;j<i;j++)
                {
                    cost[i][j]=cost[j][i]=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]));
                }
            }
            Dijkstra(n,0);
            printf("Scenario #%d
    Frog Distance = %.3lf
    
    ",id++,lowcost[1]);
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    MySQL之ORM
    MySQL之索引补充
    MySQL存储过程
    c primer plus 7编程练习
    c语言中统计单词数目程序
    c语言统计输入字符数及行数
    c语言中getchar()、putchar()函数例子
    c primer plus 6编程练习
    c语言 %c 一次输出多个字符 (特殊程序)
    c语言 复合赋值运算符的优先级低于算术运算符
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3542770.html
Copyright © 2011-2022 走看看