好几天没更新博客了,因为这周在看关于图论的算法,有好几个(还是英文名字-_-||),人晕晕的......

说一下这个Frogger吧。这个题目的话......难的不是做法,而是题意。。。

大致题意:有两只青蛙A和B,都在湖里的石头上(湖里还有其他石头),现在A要去B的位置,方法是借助其他石头跳过去,求的是所有可达路径中,权值(石头之间的距离)最大的是多少。

每组案例的第一组和第二组数据分别是青蛙A和青蛙B的坐标。这么说吧,求最小生成树的最大权。

尴尬的是写的是混合语言啊,不会用操纵符(-_-||)。新手,对算法还不是很了解,请多多体谅!!!

Sample Input

2                           // 石头(点)的个数N,下面N行是石头的坐标

0   0

3   4

17   4

19   4

18   5

Sample Output(注意结果从#1开始,并且每次输出空一行,结果保留三位小数)

Scenario #1 Frog Distance = 5.000

Scenario #2 Frog Distance = 1.414

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define size 220
using namespace std; struct point//石头(图的顶点)
{
double x,y;
}p[size]; double stone[size][size],dis[size];//一个存图,一个存点之间的距离(权)
int N,T,i,j,flag[size];//flag存标记的
double a,b,ans,tem,minx; double distance(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//两点之间的距离
} void Init()//初始化两个数组
{
memset(flag,,sizeof(flag));
memset(stone,,sizeof(stone));
} double Prim()
{
ans=;
int key;
double temp=0xfffffff;//先来一个大数
for(i=;i<=N;i++)
dis[i]=stone[][i];//存上各自的距离(权)
flag[]=;//咱们先从1号位置开始遍历
for(i=;i<N;i++)
{
minx=temp;
for(j=;j<=N;j++)
if(flag[j]!=&&dis[j]<minx)//找到没有遍历过的点并且它周围权值最小的边
{
minx=dis[j];//把这条边的权设置为最小,下次就跟它比较了
key=j;//记录一下这个点
}
if(ans<minx)
ans=minx;//记录一下距离
if(key==)//到终点了,结束
break;
flag[key]=;//这个点已经来过了
for(int j=;j<=N;j++)//维护这棵树(取权值较小的)
{
if(flag[j]!=&&stone[key][j]<dis[j])
dis[j]=stone[key][j];
}
}
return ans;
} int main()
{
T=;
while((cin>>N),N)
{
Init();
for(i=;i<=N;i++)
cin>>p[i].x>>p[i].y;//输入坐标
for(i=;i<=N;i++)
for(j=;j<=N;j++)
stone[i][j]=stone[j][i]=distance(p[i].x,p[i].y,p[j].x,p[j].y);//两点的距离(a到b等效b到a)
cout<<"Scenario #"<<T<<endl;
printf("Frog Distance = %.3lf\n",Prim());//这里有点尴尬(-_-||)
cout<<endl;
T++;
}
return ;
}

2016HUAS_ACM暑假集训3B - Frogger的更多相关文章

  1. 2016HUAS_ACM暑假集训4C - 递推

    题目大意:给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形. 这里我们可以这样看: 对于行:假如是m单位长度,则长度为1的矩形有m个,长度为2的矩形有m-1个......长度为m的只有1 ...

  2. 2016HUAS_ACM暑假集训4A - 递推

    利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...

  3. 2016HUAS_ACM暑假集训4D - 计数,排列

    一个错排公式的基础应用. 大致题意:求n个数的错误排列方式.(每个都要错) 在这里先贴一下错排公式:D(1)=0:D(2)=1:D(n)=(n-1)*(D(n-1)+D(n-2)) 它的推导也非常有意 ...

  4. 2016HUAS_ACM暑假集训4M - 基础DP

    简单的0-1背包问题,大家都会做的.题意不想解释太多. 简述题目的案例及以几个关键 Sample Input 1                            //测试组数T 5 10     ...

  5. 2016HUAS_ACM暑假集训4K - 基础DP

    我不知道怎么用DP,不过DFS挺好用.DFS思路很明显,搜索.记录,如果刚好找到总价值的一半就说明搜索成功. 题目大意:每组6个数,分别表示价值1到6的物品个数.现在问你能不能根据价值均分. Samp ...

  6. 2016HUAS_ACM暑假集训4F - 数论

    这个题目,如果没找到方向,确实有点一头雾水.但是如果你找对方向了,AC是分分钟的事.答案就是看n和m是否有除1之外的公约数. 简单证明:设n和m最大公约数不是1,假设为p.n和m总可以化为一个数乘以k ...

  7. 2016HUAS_ACM暑假集训4B - 递推

    这种数学推理题目题意极其明显,在做的时候,可以多写几组,这样找起规律来会容易些.概括起来就是:题意简单暴力,案例毫无价值. 一个三角形最多可以把一个平面分成两部分,两个三角形最多是8(2+6)部分,而 ...

  8. 2016HUAS_ACM暑假集训3G - 还是畅通工程

    最小生成树,题目简单.套的Prim模板,其他的题目比较有意义. Sample Input 3                             //村庄个数1 2 1               ...

  9. 2016HUAS_ACM暑假集训3F - Jungle Roads

    这个题目属于最小生成树问题,可以用Prim,也可以用Kruskal(还没试).题意简单直接,给你一个图,求出它最小生成树的权值. 题目最有趣的地方就是图的顶点是字母,稍微处理一下就好了. Sample ...

随机推荐

  1. iOS - Mac OS X 终端设置

    Mac OS X 终端设置 1)Finder 中显示资源库 方法一: 在 "终端" 中输入下面的命令: 显示: chflags nohidden ~/Library/ 隐藏: ch ...

  2. 使用Github管理项目代码的版本

    作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法. 在Git中并不存在主库这样的概 ...

  3. JSP动作标签

    动作标签是一种特殊的标签,它影响JSP运行时的功能. (1)include动作标签 <jsp:include page=”文件的名字” />           <%--   不可有 ...

  4. javascript new

    1. 仅function可以使用new 2. function使用new时,会拷贝function中this的内容给新对象,并将function的prototype指向新对象(如果该function没 ...

  5. Windows Store App 控件动画

    在开发Windows应用商店应用时,开发工具中已经封装了大量的控件供开发人员使用,而其中有一部分控件,例如FlipView.ToolTip.ListView以及SemanticZoom等控件中已经默认 ...

  6. Oracle中建立表

    -- Create table create table STUDENT( sno VARCHAR2(3) not null, sname VARCHAR2(8) not null, ssex VAR ...

  7. DeepLearning之路(一)逻辑回归

    逻辑回归 1.  总述 逻辑回归来源于回归分析,用来解决分类问题,即预测值变为较少数量的离散值. 2.  基本概念 回归分析(Regression Analysis):存在一堆观测资料,希望获得数据内 ...

  8. 什么是CPA, CPS, CPT?

    在互联网上或移动端进行产品推广时,经常听到很多术语,什么CPA,CPS,CPT等等.不知是怎么来的,今天网上搜一下术语,在这里做一下笔记. CPA(Cost Per Action) 每行动成本. CP ...

  9. C# 跨线程操作无效

    提示此错误的原因就是控件由主线程创建,在另一个线程进行操作时就会被阻止,防止数据间随意篡改. 如果一定要跨线程作业,如进度条或状态显示等,基本有三种方法解决: 1.Control.CheckForIl ...

  10. Java 导出EXCEL

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...