这个题一开始不知道咋做,但是大致有点意思。后来还是借鉴了题解发现可以用dijkstra,不太理解。但是在最后自己推的时候突然理解了。

dijkstra应该也算是动态规划。我们用dis[i]数组作为青蛙跳到第i个石头时途经的最大跳跃距离。借鉴dijkstra的思路,先找最小的dis[i].然后i作为中间点修改dis[j],

1<=j<=n;并且U[i]==0;那么对于修改的时候对于点j如果dis[j]>max(dis[i],arcs[i][j]),那么肯定有修改的必要,新的dis[i]=max(dis[i],arcs[i][j])。至于为什么可以这样呢,其实是和dijkstra的证明类似的,但是这里有一个简单的思路。因为我们一开始对于每个点就有最初的dis[j],当我们可以借助中间点逐渐优化的时候,那么dis[j]肯定是越来越优化的,直到结束。其实这样想有点像floyd。动态规划真的是神奇啊!

Ps:今天历经坎坷,终于组队了。虽然水平都不高,但是距离区域赛还有6个月!we can make it!

 #include <iostream>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <stack>
#include <queue>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const double Pi=3.14159265358979323846;
typedef long long ll;
const int MAXN=+;
const int dx[]={,,,-};
const int dy[]={,-,,};
const int INF = 0x3f3f3f3f;
const int NINF = 0xc0c0c0c0;
const ll mod=1e9+;
struct graph
{
double weight;
double arcs[MAXN][MAXN];
}G;
struct node{
int a,b;
}p[MAXN];
double dis[MAXN];
//v是起点,n是一共的点的个数
//dis[i]记录的是从七点到i,所有路径中的最小单步值
void dijkstra(int v,int n)
{
int U[MAXN];
for(int i=;i<=n;i++) U[i]=;
for(int i=;i<=n;i++) dis[i]=INF; dis[v]=; for(int i=;i<=n;i++)
{
double minn=INF;int k=-;
/*for(int j=1;j<=n;j++)
{
cout <<dis[j]<<" ";
}
cout <<endl<<"**********"<<endl;*/
for(int i=;i<=n;i++)
{
if(minn>dis[i]&&U[i]==)
{
minn=dis[i];
k=i;
}
}
U[k]=; for(int i=;i<=n;i++)
{
if(U[i]==&&dis[i]>max(G.arcs[i][k],dis[k]))
{
dis[i]=max(G.arcs[i][k],dis[k]);
}
}
}
}
int main()
{
int n;int cnt=;
while(scanf("%d",&n)&&n)
{
for(int i=;i<=n;i++)
{
scanf("%d%d",&p[i].a,&p[i].b);
}
for(int i=;i<n;i++)
{
for(int j=i+;j<=n;j++)
{
G.arcs[i][j]=sqrt((p[i].a-p[j].a)*(p[i].a-p[j].a)+(p[i].b-p[j].b)*(p[i].b-p[j].b));
G.arcs[j][i]=G.arcs[i][j];
}
}
dijkstra(,n);
printf("Scenario #%d\n",cnt++);
printf("Frog Distance = %.3f\n\n",dis[]);
}
return ;
}

poj 2253——Frogger的更多相关文章

  1. 最短路(Floyd_Warshall) POJ 2253 Frogger

    题目传送门 /* 最短路:Floyd算法模板题 */ #include <cstdio> #include <iostream> #include <algorithm& ...

  2. POJ 2253 Frogger ,poj3660Cow Contest(判断绝对顺序)(最短路,floyed)

    POJ 2253 Frogger题目意思就是求所有路径中最大路径中的最小值. #include<iostream> #include<cstdio> #include<s ...

  3. POJ. 2253 Frogger (Dijkstra )

    POJ. 2253 Frogger (Dijkstra ) 题意分析 首先给出n个点的坐标,其中第一个点的坐标为青蛙1的坐标,第二个点的坐标为青蛙2的坐标.给出的n个点,两两双向互通,求出由1到2可行 ...

  4. POJ 2253 Frogger(dijkstra 最短路

    POJ 2253 Frogger Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fion ...

  5. POJ 2253 Frogger

    题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  6. poj 2253 Frogger 最小瓶颈路(变形的最小生成树 prim算法解决(需要很好的理解prim))

    传送门: http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  7. poj 2253 Frogger (dijkstra最短路)

    题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  8. POJ 2253 ——Frogger——————【最短路、Dijkstra、最长边最小化】

    Frogger Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  9. POJ 2253 Frogger Floyd

    原题链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  10. poj 2253 Frogger (最长路中的最短路)

    链接:poj 2253 题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过随意石头到达B, 问从A到B多条路径中的最长边中的最短距离 分析:这题是最短路的变形,曾经求的是路径总长的最 ...

随机推荐

  1. 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。 输入格式: 输入给出一行字符。 输出格式: 在一行中输出单词个数。 输入样例: Let's go to room 209. 输出样例: 5

    MD,一开始就想着怎么 用空格和结尾前判断字母 来计算写的头的爆了, 反过来判断空格后面是否有 =‘ ’就尼玛容易多了 #include<stdio.h> #include<stdl ...

  2. js 求select option 的值和对应option的内容

    <select onChange="aa(this)" name="a"> <option value="a">1& ...

  3. add()方法和Put()方法的差别

    add()和put()方法都是集合框架中的添加元素的方法. 但是put()方法应用于map集合中,add()方法应用于collection集合中. 二者的主要区别是:返回值类型不一样. add()放回 ...

  4. 延时显示(类QQ头像显示)

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. Eclipse集成Tomcat插件(特别简单)

    . 只需要一个jar包 复制到eclipse/plugins文件夹下,重启Eclipse即可看到如下三只小猫 1.修改Tomcat (1)Tomcat version:版本 (2)Tomcat Hom ...

  6. IO多路复用,select、poll、epoll 编程主要步骤

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. 深入理解java虚拟机---对象的创建过程(八)

    1.对象的创建过程 由于类的加载是一个很复杂的过程,所以这里暂时略过,后面会详细讲解,默认为是已加载过的类.着重强调对象的创建过程. 注意: 最后一步的init方法是代码块和构造方法. 以上是总图,下 ...

  8. MFC 中GetClientRect、ClientToScreen、GetWindow、RectScreenToClient的使用

    CWnd* pWnd = GetDlgItem(IDB_BUT_RECOGNIZE); pWnd->GetClientRect(&rect);   //指该控件自身客户区的矩形,原点为控 ...

  9. rabbitMq无法消费发送的q的问题

    1.问题叙述: 该项目配置了10来个mq,应对新开发需求,我也加了一个mq配置,然后在本地代码当中调用,当中接受,与前面写法相似,项目上测试环境测试.发现发送了queue之后本地消费日志没有的bug. ...

  10. 第四周四则运算3 PSP表格

    PSP2.1 Personal Software Process Stages time Plan 计划   -Estimate 整数四则运算 分数四则运算 括号 括号四则运算 在主函数中调用 30m ...