poj2253 Frogger(用单源最短路dijkstra的思路求解)

fibplus-8.0.0.zip FIBPlus 是一套面向 Delphi / C++Builder 的 Firebird、InterBase 数据库访问组件,特点是直接走原生客户端 API,不经 BDE/ODBC,速度快且可控性强。8.0.0 版本主要适配 Delphi 2009 及以后的版本(Delphi 6–2007 需用 7.9.x),核心组件包括 TpFIBDatabase、TpFIBTransaction、TpFIBDataSet 等,支持精细事务管理、本地缓存、BLOB 处理和备份恢复等数据库服务。该库原为 Devrace 的商业组件,现由社区在 GitHub 的 madorin/fibplus 项目开源维护,建议从官方仓库获取源码而非第三方网盘压缩包。安装时解压后用对应版本的工程组(10.4+ 统一为 `FIB.groupproj`)Build 全部包,再 Install `dclFIB` 并在 Library 路径加入 Source 目录即可。新项目中若需官方技术支持,也可考虑 FireDAC、IBDAC 等更现代的替代方案。 立即下载

题意:在平面坐标的第一象限给出n(2<=n<=200)个点的坐标,一只青蛙要从起点出发跳到终点(途中可以经过任意点),青蛙的落脚点只能在给出的n个点中,问青蛙的跳跃能力最少是多长?

分析过程和dijkstra的过程几乎一摸一样,设d[i]表示从起点到i的所需最短距离,w[i][j]表示点i和j的欧拉距离。
步骤:
1. 设点i未访问,用所有访问的点j更新d[i],更新公式为d[i]=min(d[i],max(d[j],w[i][j]))。
2. 在所有未访问的点i中找出最小的d,然后将该点设为访问。

复杂度O(n^3)的代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const double inf=1e9;
const int maxn=200;
typedef pair<double,double> PAIR;
PAIR p[maxn+5];

int n;
double d[maxn+5];
double w[maxn+5][maxn+5];

double dis(PAIR &a,PAIR &b){
    return sqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));
}

bool vis[maxn+5];

int find(){
    int mini=-1;
    double mind=inf;
    for(int i=1;i<=n;i++)if(vis[i]==false){
        for(int j=1;j<=n;j++)if(vis[j]){
            d[i]=min(d[i],max(d[j],w[i][j]));
        }
        if(d[i]<mind){
            mind=d[i];
            mini=i;
        }
    }
    return mini;
}

void dj(int cur){
    memset(vis,false,sizeof(vis));
    fill(d+1,d+1+n,inf),d[cur]=0;
    while((cur=find())!=-1){
        vis[cur]=true;
    }
}


int main(){
    int T=0;
    while(scanf("%d",&n),n){
        for(int i=1;i<=n;i++){
            scanf("%lf%lf",&p[i].first,&p[i].second);
            for(int j=1;j<=i;j++){
                w[i][j]=w[j][i]=dis(p[i],p[j]);
            }
        }
        dj(1);//求出所有点到起点的最小跳跃能力
        printf("Scenario #%d\n",++T);
        printf("Frog Distance = %.3f\n\n",d[2]);
    }
}

可以用优先队列优化到O(n^2logn):

  1. 设点i未访问,点j已访问,对所有的点j,将max(d[j],w[i][j]) 放到到pq[i]中,每次取出最小的去更新d[i]即可。
  2. find中更新完d,并且找到最小的d之后,要用它的下标mini去更新所有未访问的点i的pq,更新方程为:pq[i].push(max(d[mini],w[mini][i]))。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const double inf=1e9;
const int maxn=200;
typedef pair<double,double> PAIR;
PAIR p[maxn+5];

int n;
double d[maxn+5];
double w[maxn+5][maxn+5];

double dis(PAIR &a,PAIR &b){
    return sqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));
}

priority_queue<double,vector<double>,greater<double> >pq[maxn+5];

bool vis[maxn+5];

int find(){
    int mini=-1;
    double mind=inf;
    for(int i=1;i<=n;i++)if(vis[i]==false){
        d[i]=min(d[i],pq[i].top());
        if(d[i]<mind){
            mind=d[i];
            mini=i;
        }
    }
    return mini;
}

void update(int cur){
    for(int i=1;i<=n;i++)if(vis[i]==false){
        pq[i].push(max(d[cur],w[cur][i]));
    }
}

void initpq(){
    for(int i=1;i<=n;i++){
        while(!pq[i].empty())pq[i].pop();
        for(int j=1;j<=n;j++){
            pq[i].push(max(d[j],w[i][j]));
        }
    }
}

void dj(int cur){
    memset(vis,false,sizeof(vis));
    fill(d+1,d+1+n,inf),d[cur]=0;
    initpq();
    while((cur=find())!=-1){
        vis[cur]=true;
       //这里不需要加pq[cur].pop(),因为cur标记为访问之后,find中的i不会是cur了
        update(cur);
    }
}


int main(){
    int T=0;
    while(scanf("%d",&n),n){
        for(int i=1;i<=n;i++){
            scanf("%lf%lf",&p[i].first,&p[i].second);
            for(int j=1;j<=i;j++){
                w[i][j]=w[j][i]=dis(p[i],p[j]);
            }
        }
        dj(1);
        printf("Scenario #%d\n",++T);
        printf("Frog Distance = %.3f\n\n",d[2]);
    }
}
基于K8S + apisix/istio 实现云原生模块化微服务.自带代码生成器,能够生成对表的增删改查的逻辑代码 基于K8S + apisix/istio 实现云原生模块化微服务.自带代码生成器,能够生成对表的增删改查的逻辑代码.是标准Maven项目,只依赖springboot,没有hibernate,struts,ibatis,数据库调优可以使用druid输出慢sql,比分析xml中的语句更直观,springrain所有的sql语句都使用Finder封装管理,只要查看Finder的引用即可. 立即下载

相关推荐

工艺部2026年终总结及2027工作规划PPT.pptx

制造业生产、工艺、设备、质量全套 PPT 资料,包含月度经营复盘、季度数据分析、部门年终总结规划、产线与检验规范、TPM 设备保全、质量意识、质量总监高阶培训等课件。内容兼顾经营指标偏差分析、述职汇报、现场制度宣贯、岗位技能教学。 适合操作工、检验员、设备维保员、工艺 / 品质 / 设备工程师、生产主管、各部门部长、质量总监、厂长、内部培训师、精益专员使用,覆盖一线执行、骨干分析、部门负责人述职、高管进阶全层级,可直接用于工厂汇报、内部培训、述职复盘。

单源最短路问题 dijkstra算法 总结

Dijkstra(迪杰斯特拉)算法,用于计算一个节点到其他所有节点的最短路径。要注意的是这个算法中路径的权值不能有负边,如果有负边的话要运用bellman ford算法。 学习了一下dijkstra算法,感觉跟最小生成树的Prim算法有点类似。感觉dijkstra也是一个贪心的策略,用集合S表示的是已经找出最小路径的点,用dis[]来表示每个点当前距离源点的最短距离。再用一个数组来存储两点之

liujc_的专栏 1191

wordbuddy破甲经验分享

wordbuddy破甲经验分享

(poj3159)dijkstra优先队列实现

poj3159 #include #include #include #include using namespace std; int n,m,head[30010]; int c; struct is{ int index,cost; friend bool operator <(is a,is b){ if(a.cost== b.cost)return a.inde

袁汉春 993

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文详细介绍了一种基于Simulink的双闭环PWM整流器采用虚拟同步发电机控制(VOC)策略与空间矢量脉宽调制(SVPWM)技术的仿真模型。该模型在dq同步旋转坐标系下构建电压定向控制系统,实现了电压外环与电流内环的双闭环控制结构,重点阐述了VOC控制原理、SVPWM调制算法的实现方法及其在Simulink环境中的模块化搭建过程。通过该仿真平台,能够有效实现单位功率因数运行、直流母线电压稳定控制以及优异的动态响应性能,适用于电力电子变换器、新能源并网系统及电机驱动等领域的控制策略验证与性能评估。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的高年级本科生、研究生,以及从事电力电子系统仿真、新能源并网控制研究的科研人员和技术工程师。; 使用场景及目标:①深入理解三相PWM整流器在dq坐标系下的数学建模与控制机理;②掌握VOC控制策略的核心思想及其相较于传统矢量控制的优势;③学习SVPWM调制技术的实现流程与Simulink建模技巧;④通过仿真实验验证双闭环控制系统的静态精度与动态稳定性,提升对先进电力电子控制系统的分析与设计能力。; 阅读建议:建议结合电力电子技术、现代控制理论和电机控制相关基础知识进行学习,按照仿真模型的结构逐步分析各功能模块的信号流向与参数配置,重点关注锁相环(PLL)、坐标变换、PI控制器设计及SVPWM模块的实现细节,并可通过调整控制参数观察系统响应变化,以深化对控制策略动态特性的理解。

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文系统介绍了基于Simulink平台构建的储能双向Buck-Boost变换器仿真模型,融合模型预测电流控制与电压下垂控制策略,面向锂电池储能系统的高效充放电管理。该模型深入实现了双闭环控制架构的设计与动态性能分析,涵盖系统建模、关键控制算法实现及稳定性验证,并配套提供参考文献以支撑理论深度与技术复现性。资源包还整合了多种典型电力电子拓扑的仿真案例,如各类DC-DC变换器、谐振变换器、PWM整流器等,充分体现了其在新能源发电、微电网能量调度及电力系统稳定控制中的广泛应用价值和技术延展性。; 适合人群:适用于电气工程、自动化、电力电子及相关专业的高校研究生、科研人员以及从事能源系统仿真与控制设计的工程技术人员;要求具备一定的Simulink/MATLAB操作能力及电力电子与自动控制基础知识;; 使用场景及目标:①深入理解双向Buck-Boost电路在储能系统中的工作机理与能量双向流动控制方法;②掌握模型预测控制(MPC)与下垂控制在实际电力变换系统中的建模流程与参数整定技巧;③为科研课题、学位论文或工程项目提供高可靠性、可复用的仿真原型与技术参考方案; 阅读建议:建议结合文中列出的参考文献与网盘提供的完整仿真资源,按照目录结构循序渐进地学习各模块案例,重点剖析控制逻辑搭建、调节器设计与系统动态响应特性,通过动手仿真与参数调试深化对控制策略性能与鲁棒性的理解。

POJ 2888 Magic Bracelet(Polya计数+dp+矩阵快速幂+欧拉函数+乘法逆元)

题目链接: POJ 2888 Magic Bracelet 题意: 有一串nn个珠子的项链,用mm种颜色来染,有kk个限制条件:a[i]和b[i]a[i]和b[i]不能相邻。问本质不同的项链有多少种?(考虑旋转,答案对99739973取模,且gcd(n,9973)=1gcd(n,9973)=1)。数据范围:n≤109,1≤m≤10,0≤k≤m∗(m−1)2n \leq 10^9,1\leq

ramay7 1004

51单片机也能玩转GC9A01彩屏?超详细移植指南与性能优化技巧

本文详细介绍了如何在51单片机上高效驱动GC9A01彩屏,包括硬件连接优化、SPI模拟驱动、内存管理策略及高级刷新技术。通过分段缓冲、颜色压缩和差异化刷新等技巧,显著提升显示性能,使51单片机也能流畅运行240x240分辨率的彩色TFT屏幕。

hp777的博客 189

poj2387解题报告(Dijkstra算法)

题目大意:给你一个图,求最短路。 解题思路:dijkstra模板题直接上即可。 注意点:有重边,输入的时候判断下,以边权小为准 #include #include #include #include using namespace std; const int INF=(1<<30); const int maxn=1000+100; int Map[maxn][maxn],dis[maxn

h123120的专栏 565

SAP移动类型

SAP移动类型移动类型定义 移动类型定义

qq_20593197的博客 6202

Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建

本文介绍Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建方法。

无线通信实验室 1万+

POJ 3159 Candies(Dijkstra算法+优先队列+堆)

Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 37796   Accepted: 10637 Description During the kindergarten days, flymouse was the monitor of his class. Occasio...

qq_37618760的博客 301

软件项目成本控制实战:从COCOMO模型到挣值分析的5个关键步骤

本文详细介绍了软件项目成本控制的5个关键步骤,从COCOMO模型估算到挣值分析预警,帮助中小型团队精准管理预算。通过简化COCOMO II的有机模式、动态建立成本基准、轻量化挣值分析等方法,项目经理可以有效应对预算超支和进度延误问题,提升项目成功率。

weixin_30733003的博客 227

POJ2253 Frogger(最短路变形,Dijkstra)

Sample Input 2 0 0 3 4 3 17 4 19 4 18 5 0 Sample Output Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414 Source Ulm Local 1997 思路:有两只青蛙和若干块石头,现在已知这些东西的坐标,两只青蛙A坐标和青蛙B坐标是第一...

柯微 263

H3C-HCL模拟器-STP生成树协议实验

边缘接口的存在是为了提高网络的收敛速度和性能。由于边缘接口连接的是终端设备,这些设备通常不会产生环路,因此不需要参与生成树协议的计算和决策。边缘接口通常是指那些不会连接到其他交换机或生成树的冗余路径的接口。H3C交换机千兆口的cost默认是20,把SW2的g1/0/2接口的cost改为100;SW4是根网桥,根据STP计算,闭塞端口应该在SW1上;方法:使得SW2到SW1的cost比SW4到SW1更大;7)修改配置:把SW1连接PC的所有接口配置为边缘接口。协议的计算开销,提高网络的收敛速度。

网络工程 2995

ArcGIS与地理加权回归GWR【一】

因此,在实际问题研究中我们经常发现回归参数在不同地理位置上往往表现为不同,也就是说回归参数随地理位置变化,这时如果仍然采用全局空间回归模型(全局假设β是不会变得),得到的回归参数估计将是回归参数在整个研究区域内的平均值,如上所说某一个因素在ABC等不同的地理位置对房价的影响是不同的,假如采用全局空间回归模型,便忽略了数据的空间位置属性,只反映平均意义下因变量与自变量的相关关系,而不能有效反映回归关系的空间非平稳性的特征。当自变量为1个时,是一元线性回归,自变量为2个及以上时,称为多元线性回归。

JData_Engineer的博客 1374

poj2253 Frogger(最小生成树求最大边/最短单源路径变形)

题意:有一只青蛙在坐标为(x0,y0)的石头上,他不想游泳,想跳去找在(x1,y1)石头上的青蛙女神,还有另外的n-2块石头,求青蛙要保证一步可以跳多远才能跳到青蛙女神处。 思路:我一开始是用kruskal算法做的,从长度最短的边开始连接,直到(x0,y0)到(x1,y1)有路径,即在同一棵数中,可以过。后来看了网上的题解,说这是一道单源最短路变形。G++编译,double 用了%.3lf 输出

cookiesMonster 409

军品研制过程评审活动-(一)论证阶段

军品研制过程评审活动-(一)论证阶段

Abel的博客 3815

POJ-2253 Frogger---最短路变形&&最大边的最小值

题目链接: https://vjudge.net/problem/POJ-2253 题目大意: 青蛙A想访问青蛙B,必须跳着石头过去,不幸的是,B所在的石头太远了,需要借助其他的石头,求从A到B的路径中,青蛙最少需要的跳跃能力是多远 思路: 理清题意,这里规定的是每条路中的最大边为青蛙需要的跳跃能力,要求这个跳跃能力的最小值,思路和POJ2263一样POJ2263求的是最小边的最大值,这...

weixin_34202952的博客 177

17.6 LangSmith 私有化部署实战指南:企业级AI应用的安全基石

LangSmith 私有化部署, 企业级AI开发平台, 数据隐私合规, 混合云架构, 模型监控与审计。

yonggeit的博客 3777

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ1724 ROADS(深搜DFS,最短路,dijkstra,用优先队列优化)

题目: ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14825   Accepted: 5370 Description N cities named with numbers 1 ... N are connected w

riba2534的博客 3660

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

完全二叉树结点数,叶子结点数

设结点数为n,叶子结点数为m,则 m = cell ( n / 2 ) n = m * 2 - 1

Daniel 5591

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

单源最短路,迪杰斯特拉算法

一个包含n个结点的图,求其他点到源点s的最短距离。 设d[i]表示结点i到s的最短路径的长度,显然有d[s]=0; 设vis[i]表示i是否在集合S中,集合S中存放的是已经求得的最短路径的结点。 算法步骤: 首先在V-S集合中找到最小的d的下标k,然后将k加入到集合S中(令vis[k]=true),然后更新d值即可(令d[i]=min(d[i],d[k]+w[k][i]),其中w[k][i]

Daniel 542

poj1797Heavy Transportation(dijkstra)

这题和昨天做的poj2253 Frogger(用单源最短路dijkstra的思路求解) 几乎一模一样,只是点的数量范围从200变成了1000,不优化O(n^3)肯定超时,所以要用优先队列优化到O(n^2logn)。 需要注意的一点就是两点不可达则令w=0。 如果起点和终点重合,那么输出一个不小于1000000的数即可。#include<cstdio> #include<cstring> #inc

Daniel 492

二分图判定

如果图中的点可以划分成两个集合使得集合内部的点之间没有边相连。 判定方法就是二色染色法,将一个点染成一种颜色,与之相邻的点染成另一种颜色,如果发现相邻两点颜色相同,则不是二分图。#include<bits/stdc++.h> using namespace std; const int maxn=1000;vector<int>nxt[maxn+5]; int vis[maxn+5];bool d

Daniel 440
上一篇: %f和%lf
下一篇: poj1797Heavy Transportation(dijkstra)
FightingForFinal
博客等级 码龄11年 24粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值