SSL-ZYC 1615 Frogger
2018-01-13 14:22
211 查看
题目大意:
有n个石头,给出每个石头的坐标位置,请你求出第一个石头到第二个石头的一条路径满足这条路径中距离最远的相连的两个石头的距离最近。
注意:每个测试点有多组数据。
思路:
这道题的方法有很多,我用的方法是最小生成树,每组数据都进行一次寻找,并输出。
这道题是一道考细节的题,程序代码虽然并不是很长的那种,但是打出来非常的乱,有许多值得注意的细节,每一个都不能错。
另外,求两点之间的距离的方法——勾股定理详见我的博客 剑鱼行动 。
代码:
(很乱,大家见谅,谢谢!)
有n个石头,给出每个石头的坐标位置,请你求出第一个石头到第二个石头的一条路径满足这条路径中距离最远的相连的两个石头的距离最近。
注意:每个测试点有多组数据。
思路:
这道题的方法有很多,我用的方法是最小生成树,每组数据都进行一次寻找,并输出。
这道题是一道考细节的题,程序代码虽然并不是很长的那种,但是打出来非常的乱,有许多值得注意的细节,每一个都不能错。
另外,求两点之间的距离的方法——勾股定理详见我的博客 剑鱼行动 。
代码:
(很乱,大家见谅,谢谢!)
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int b[201],n,x[201],y[201],k,m,sum,d[201]; double f[201][201],a[201],minn,c[1001],maxn; double gogu(int x1,int x2,int y1,int y2) //勾股定理 { return sqrt(abs(x1-x2)*abs(x1-x2)+abs(y1-y2)*abs(y1-y2)); } int main() { scanf("%d",&n); while (n!=0) { for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) f[i][j]=f[j][i]=99999999; //初始化 for (int i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); for (int j=1;j<=i-1;j++) f[j][i]=f[i][j]=gogu(x[i],x[j],y[i],y[j]); //求两点之间的距离 } m=0; memset(c,0,sizeof(c)); memset(b,0,sizeof(b)); memset(a,0,sizeof(a)); b[1]=1; //进入集合 for (int i=1;i<=n;i++) a[i]=f[1][i]; //初始化,求每一个点到集合的最短距离 for (int j=1;j<=n-1;j++) { minn=2147483647; for (int i=1;i<=n;i++) if (b[i]==0&&a[i]<minn) { k=i; minn=a[i]; //寻找最短距离 } m++; b[k]=1; //进入集合 c[m]=a[k]; //长度标记 if (k==2) break; //如果是第二个石头(终点)就退出寻找 for (int i=1;i<=n;i++) if (b[i]==0&&a[i]>f[i][k]) a[i]=f[i][k]; //重新计算每个点到集合的距离 } sum++; maxn=0; for (int i=1;i<=m;i++) if (maxn<c[i]) maxn=c[i]; //寻找最大值 printf("Scenario #%d\nFrog Distance = %0.3lf\n\n",sum,maxn); //输出该数据的答案 scanf("%d",&n); } return 0; }
相关文章推荐
- SSL-1615 Frogger
- ssl1615-Frogger【图论,最小生成树,并查集】
- SSL 1615——Frogger【数学】【最短路】
- (ssl 1615)Frogger
- SSL-ZYC 1454 找石油
- SSL-ZYC 1758 连通图
- SSL-ZYC 手机
- SSL-ZYC 小麦高度
- SSL-ZYC 牛车
- SSL-ZYC 2547 圆环
- SSL-ZYC 1761 城市问题
- SSL-ZYC 游戏
- SSL-ZYC 懒惰的奶牛①
- SSL-ZYC 危险系数
- SSL-ZYC 愤怒的牛
- SSL-ZYC 家族
- SSL-ZYC 方案数
- SSL-ZYC 前缀转后缀
- SSL-ZYC 旅行
- SSL-ZYC 2344 刻录光盘