• B


    题意:两只青蛙,A和B,A想到B哪里去,但是A得弹跳有限制,所以不能直接到B,但是有其他的石头作为过渡点,可以通过他们到达B,问A到B的所有路径中,它弹跳最大的跨度的最小值

    分析:最短路问题,用prim解决的;开始想用dijkstra去做,写了一下发现掌握不熟练写不出来,看了别人的,然后就用了最小生成树,中间还是出了很多问题,有模板是好,但是不会灵活运用,那就尴尬了。。。。。

    AC代码 :

    #include <iostream>//最小生成树解决的
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #define MAX 100000
    using namespace std;
    int n,k;
    double mincost,m;
    double g[1001][1001],lowcost[1001];
    int vis[1001];
    struct Node
    {
    double x,y;
    } node[1001];
    void prim()
    {
    mincost=0;
    for(int i=1; i<=n; i++)
    //vis[i]=0;这个必须标记
    lowcost[i]=g[1][i];
    vis[1]=1;
    for(int i=1; i<=n; i++)
    {
    m=MAX;
    for(int j=1; j<=n; j++)
    if(!vis[j]&&lowcost[j]<m)
    {
    m=lowcost[j];
    k=j;
    }
    if(mincost<m)
    mincost=m;
    if(k==2) break;//这句话很关键.?????意思是只有两个石头的时候
    vis[k]=1;
    for(int j=1; j<=n; j++)
    if(!vis[j]&&lowcost[j]>g[k][j])
    lowcost[j]=g[k][j];
    }
    }
    //如果我是将所有还没走过的点标记为0,走过的标记为1的话,运行为0ms;无需清零
    //如果我只标记经过的点,然后清零的话就需要16ms,但是如果加上if(i==j) g[i][i]=0;则又是0ms;
    int main()
    {
    int cnt=1;
    while(~scanf("%d",&n))
    {
    memset(vis,0,sizeof(vis));
    if(n==0) break;
    for(int i=1; i<=n; i++)
    scanf("%lf%lf",&node[i].x,&node[i].y);
    for(int i=1; i<=n; i++)
    for(int j=1; j<=n; j++)
    {
    if(i==j) g[i][i]=0;
    else g[i][j]=MAX;
    }
    for(int i=1; i<=n; i++)
    for(int j=1; j<=n; j++)
    {
    g[i][j]=sqrt(fabs(node[j].x-node[i].x)*fabs(node[j].x-node[i].x)+fabs(node[j].y-node[i].y)*fabs(node[j].y-node[i].y))*1.000;
    }
    prim();
    printf("Scenario #%d ",cnt++);
    printf("Frog Distance = %.3f ",mincost);//不能用.3lf,那样会出错,因为lf只能用于scanf中,基础没打好。。。
    }
    return 0;
    }

  • 相关阅读:
    推荐!国外程序员整理的 PHP 资源大全
    PHPSTORM/IntelliJ IDEA 常用 设置配置优化
    PHPStorm下XDebug配置
    MySQL修改root密码的多种方法
    php 修改上传文件大小 (max_execution_time post_max_size)
    phpstorm8注册码
    Linux提示no crontab for root的解决办法
    网站的通用注册原型设计
    解决mysql出现“the table is full”的问题
    通过php下载文件并重命名
  • 原文地址:https://www.cnblogs.com/lbyj/p/5710768.html
Copyright © 2020-2023  润新知