作业-最短路径问题(floyd.cpp dijkstra.cpp)

Floyd(弗洛伊德)最小环核心模板题 我是一个小学六年级学生,今天我刚学了Floyd(弗洛伊德)算法,就想和大家分享了。希望大家能喜欢我的文章。希望本文能为你们提供学习资料! 阅读详情

题目描述
平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短路径。




输入
第1行:1个整数n


第2..n+1行:每行2个整数x和y,描述了一个点的坐标


第n+2行:1个整数m,表示图中连线的数量


接下来有m行,每行2个整数i和j,表示第i个点和第j个点之间有连线


最后1行:2个整数s和t,分别表示源点和目标点


输出
第1行:1个浮点数,表示从s到t的最短路径长度,保留2位小数


样例输入
5
0 0
2 0
2 2
0 2
3 1
5
1 2
1 3
1 4
2 5
3 5
1 5


样例输出

3.41

 

看标题就知道,我们要用floyd和dijkstra算法解决之~

插播一段介绍。

floyd就是可以找图中任意两点的最短路径~一个一个去中转~简单粗暴很好想也很好写~可以处理负边权~然而时间复杂度...O(N³)。

没事这道题数据比较小还是好过~~~

dijkstra就是一种单源最短路径算法~同样是去中转~时间复杂度O(N²)..不能处理负边权就很抓狂了。

还好这道题不会有负边权~~~

具体介绍还是去找别人吧因为我不想多描述..

再然后其中会用到两点间的距离公式~

(学过勾股定理的一般都能推出来)

 

第一次提交,各对了一个测试点..

检查了很久,发现一个最根本的问题..

我当时是这样输入的..

 

for(i=1;i<=n;i++)
	{
		scanf("%d%d",&p,&q);
		ds[p][q]=ds[q][p]=sqrt((x[p]-x[q])*(x[p]-x[q])+(y[p]-y[q])*(y[p]-y[q]));
	}


没错!!<=n!!不该是<=m吗?!!

 

亏我还对着floyd的核心代码看了好久微笑

所以floyd的问题算是解决了:

 

#include<cstdio>
#include<cmath>
int x[105],y[105],n,m,s,t;
double ds[105][105];
int main()
{
	freopen("floyd.in","r",stdin);
	freopen("floyd.out","w",stdout);
	int i,j,k,p,q;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d%d",&x[i],&y[i]);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			ds[i][j]=4000000010.0;
			if(i==j) ds[i][j]=0.0;
		}
	scanf("%d",&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&p,&q);
		ds[p][q]=ds[q][p]=sqrt((x[p]-x[q])*(x[p]-x[q])+(y[p]-y[q])*(y[p]-y[q]));
	}
	scanf("%d%d",&s,&t);
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				if(ds[i][k]+ds[j][k]<ds[i][j])
					ds[i][j]=ds[i][k]+ds[j][k];
	printf("%.2lf",ds[s][t]);
}


然后就是对着dijkstra一阵死磕的日子..

 

在若干个小时的艰苦奋斗之后!!

终于!!

AC!!

 

#include<cstdio>
#include<cmath>
int x[105],y[105],n,m,s,t,v[105];
double ds[105][105],c[105];
int main()
{
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	int i,j,p,q;
	double g;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d%d",&x[i],&y[i]);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			ds[i][j]=4000000000.0;
			if(i==j) ds[i][j]=0.0;
		}
	scanf("%d",&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&p,&q);
		ds[p][q]=ds[q][p]=sqrt((x[p]-x[q])*(x[p]-x[q])+(y[p]-y[q])*(y[p]-y[q]));
	}
	scanf("%d%d",&s,&t);
	for(i=1;i<=n;i++)
		c[i]=4000000000.0;
	c[s]=0.0;
	v[s]=1;
	for(i=1;i<=n;i++)
		c[i]=ds[i][s];
	for(i=1;i<n;i++)
	{
		g=4000000000.0;
		q=0;
		for(j=1;j<n;j++)
			if(!v[j]&&c[j]<g)
			{
				g=c[j];q=j;
			}
		if(!q) break;
		v[q]=1;
		for(j=1;j<=n;j++)
			if(c[q]+ds[q][j]<c[j])
				c[j]=c[q]+ds[q][j];
		/*for(j=1;j<=n;j++)
			printf("%d %.2lf\n",j,c[j]);
		printf("\n");*/
	}
	printf("%.2lf",c[t]);
}


其实..两种代码..各有各的用途吧..........

 

然后我好像也没什么要说了..

没错我就是懒得删freopen吐舌头

电子科技大学《图论及其应用》复习总结--第六章 平面图 第六章 平面图 一、平面图概念与性质 (一)、平面图的概念 定义1 如果能把图G画在平面上,使得除顶点外,边与边之间没有交叉,称G可以嵌入平面,或称G是可平面图。可平面图G的边不交叉的一种画法,称为G的一种平面嵌入,G的平面嵌入表示的图称为平面图。 注: (1) 可平面图概念和平面图概念有时可以等同看待; (2) 图的平面性问题主要涉及如下几个方面: ​ 1) 平面图的性质; ​ 2) 平面图的判定; ​ 3) 平面嵌入方法(平面性算法) ; ​ 4)涉及图的平面性问题的拓扑不变量 阅读详情

相关推荐

数学建模竞赛必备:Dijkstra与Floyd算法实战解析

图论是描述网络关系的基础数学模型,它将现实世界中的节点(如交通路口、社交用户)和连接关系(如道路、社交关系)抽象为顶点和边。其核心原理是通过定义权值来量化节点间的关联强度,从而将复杂的空间或网络优化问题转化为可计算的结构。这一技术的核心价值在于为路径规划、影响力分析、设施选址等场景提供了通用的建模与求解框架。在数学建模竞赛中,处理此类问题的两大标配算法是Dijkstra算法和Floyd-Warshall算法。Dijkstra算法采用贪心策略,利用优先队列高效求解单源最短路径,适用于起点明确的场景,如计算从救

weixin_30599769的博客 491

最短路径问题

Description 平面上有n个点(n<=100),每个点的坐标均在-10000到10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离.现在的任务是找出从一点到另一点之间的最短路径. Input 共n+m+3行 第一行为整数n. 第2行到第n+1行,每行两个整数x和y,描述了一个点的坐标(以一个空格分开

1887

Matlab实现Dijkstra算法:从图论原理到最短路径工程实践

图论是计算机科学中研究网络结构关系的数学分支,其核心模型由节点和边构成。最短路径问题是图论中的经典问题,旨在寻找网络中两点间成本最低的路线,其原理基于贪心策略,通过迭代确认最近节点并更新邻居距离来求解。该技术在工程上具有重要价值,是实现高效网络寻路与资源调度的基础。在交通规划、网络路由、物流配送等应用场景中,Dijkstra算法因其对带权非负图的优异性能而被广泛采用。本文以**Matlab**为工具平台,详细解析如何将**Dijkstra算法**的理论转化为可运行、可调试的可视化代码,涵盖邻接矩阵表示、算法

weixin_30425949的博客 351

【C++】Floyd算法解决最短路径问题

最短路径问题 问题描述:平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短距离。 输入: 第1行为整数n,表示图中顶点的个数。 第2行到第n+1行(共n行),每行两个整数x和y,描述了一个点的坐标(以一个空格分隔)。 第n+2行为一个整数m,表示图中连线的个数。 此后的m行,每行描述一条连线,由两个整数i和j.

Mitchell_Donovan的博客 1654

Python图论与最短路径算法实战:从NetworkX基础到数学建模应用

图论作为离散数学的重要分支,通过节点和边的抽象模型描述实体间复杂关系,其核心思想是将现实问题转化为网络结构进行分析。Dijkstra等最短路径算法基于贪心策略,通过迭代松弛操作寻找两点间最优路径,在时间复杂度与最优性间取得平衡。这类算法在工程实践中具有极高价值,能够为物流配送、交通规划、通信网络等场景提供量化决策支持。本文以Python的NetworkX库为工具,深入解析图结构创建、属性查询与可视化方法,并重点演示如何将城市交通网络抽象为加权图,利用Dijkstra算法求解最优运输路径。通过环境配置、代码实

weixin_34375251的博客 378

图论核心算法精讲:从DFS/BFS到Dijkstra与拓扑排序

图论作为计算机科学中研究连接关系的核心数学分支,其抽象模型广泛应用于社交网络、路径规划与任务调度等领域。理解图的基本存储结构(如邻接表)是掌握其算法的基石,它直接决定了后续操作的效率。从原理上看,深度优先搜索(DFS)和广度优先搜索(BFS)构成了图遍历的两把万能钥匙,前者擅长探索所有可能路径与处理依赖关系,后者则专攻无权图的最短路径问题。在工程实践中,面对带权图的最短路径需求,Dijkstra算法凭借其贪心策略与优先级队列优化,成为解决单源、非负权问题的首选。同时,对于具有依赖关系的任务排序,拓扑排序(如

weixin_30340617的博客 495

最短路径问题【四种方法】

最短路径问题 题目 平面上有n个点(N&amp;amp;amp;lt;=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。 输入 输入共有n+m+3行,其中: 第一行为一个整数n。 第2行到第n+1行(共n行),每行的两个整数x和y,描述一个点的坐标(以一个空格隔...

欢迎您的光顾awa 7794

C++实现中国邮路问题最短路径优化项目实战

虽然可直接用于小根堆,但在某些复杂场景下需自定义结构体与比较函数:// 用于小根堆这种方式提高了可读性,并支持附加字段(如父节点、时间戳)的携带。所谓负环(Negative Cycle),是指图中某个环路上所有边的权重之和为负数。一旦存在这样的环,理论上可以通过无限次绕行使其路径长度趋于负无穷,从而破坏最短路径的存在性。在CPP问题中,虽然主体目标是最小化总行走距离,但在预处理阶段需频繁调用最短路径算法(如Floyd或Johnson)来计算奇度顶点之间的最小权匹配。

weixin_42476987的博客 514

最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

本文内容框架: §1 Dijkstra算法 §2 Bellman-Ford算法 §3 Floyd-Warshall算法 §4 Johnson算算法 §5 问题归约   §6 小结 常用的最短路径算法有:Dijkstra算法、Bellman-Ford算法、Floyd-Warshall算法、Johnson算法 最短路径算法可以分为单源点最短路径和全

qinzhaokun的专栏 1327

最短路径点连线版

平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。   若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的   任务是找出从一点到另一点之间的最短路径。

10000个为什么

关于电脑方面的知识问答

用Floyd算法和Dijkstra算法分别求多源最短路径和单源最短路径(第二次作业)

用Floyd算法和Dijkstra算法分别求多源最短路径和单源最短路径。 问题: 用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)。 对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。 解析: 用Floyd算法求解题一,我们用三重循环进行判断,当然我们可以进行相应的减枝,不用对无效的数据即没有连通的点算最短距离。 用Dijkstra算法求解题二,我们可以用优先队列优化问题,获取最短边的时候可以降低复杂度,因

濡苏的博客 529

C++实现Dijkstra(迪杰斯特拉)算法

主要为大家详细介绍了C++实现Dijkstra(迪杰斯特拉)算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

(C++)最短路径(Dijkstra算法,最详尽代码注释)

本文采用C++实现代码。

IqNus的博客 811

深入解析LCD DRM驱动框架中的KMS与GEM机制

本文深入解析了Linux内核中DRM(Direct Rendering Manager)驱动框架的核心机制,重点剖析了KMS(内核模式设置)与GEM(图形执行管理器)的工作原理。KMS作为显示系统的总指挥,负责原子化地控制CRTC、Encoder、Plane等硬件资源,确保画面同步更新,避免撕裂;GEM则作为显存大管家,通过DUMB和PRIME机制高效管理图形缓冲区的分配、共享与同步。文章结合RK3568平台实战,阐述了如何利用这些机制优化显示性能,并提供了调试技巧与常见问题解决方案。

weixin_29188997的博客 387

用示波器抓取同步Buck自举电容波形:从充电回路到SW节点振铃的完整分析

本文通过实测TI TPS54561和MPS MPQ4572同步Buck芯片,详细解析了自举电容在充电、维持和放电三个工作阶段的波形特征。重点揭示了电感泄放回路与充电回路重叠时,在SW节点引发的振铃现象及其产生机理,并提供了串联阻尼电阻等有效的工程抑制方法。文章结合示波器实测,为硬件工程师提供了从波形观测到问题调试的完整实践指南。

weixin_29276847的博客 372

图论最短路径算法实战:从Dijkstra到Floyd的数学建模与工程应用

图论是计算机科学中描述实体间关系的基础模型,其核心思想是通过节点和边来抽象现实世界的网络结构。最短路径算法作为图论的关键应用,旨在寻找图中两点间累积权重最小的路径,其技术价值在于为各类优化问题提供了高效的数学解决方案。在工程实践中,Dijkstra算法通过贪心策略和堆优化,能快速求解单源非负权最短路径,广泛应用于地图导航和网络路由;而Floyd算法基于动态规划,以简洁的三重循环解决全源最短路径问题,适用于节点规模有限的稠密图分析。这些算法共同构成了解决物流配送、社交网络分析和任务调度等场景中路径优化问题的核

weixin_30702441的博客 337

Intel Mobileye EyeQ Ultra:RISC-V架构的L4自动驾驶芯片解析

RISC-V作为开源指令集架构,凭借其模块化设计和可定制特性,正在重塑高性能计算领域。其精简指令集带来的确定性执行时序,特别适合自动驾驶等实时性要求严苛的场景。在异构计算架构中,RISC-V与专用加速器(如NPU、GPU)的协同设计,能显著提升能效比和算力密度。Mobileye EyeQ Ultra采用12核RISC-V集群,结合176TOPS AI加速器和5nm工艺,实现了L4级自动驾驶所需的实时感知与决策能力。这种架构为车载计算平台提供了可扩展的解决方案,同时降低了系统复杂度和BOM成本。

weixin_33245447的博客 426

程序设计思维与实践 Week7作业(TT的魔法猫(Floyd)、TT的旅行日记(Dijkstra)、TT的美梦(负环))

** A - TT 的魔法猫 ** 题目描述 众所周知,TT 有一只魔法猫。 这一天,TT 正在专心致志地玩《猫和老鼠》游戏,然而比赛还没开始,聪明的魔法猫便告诉了 TT 比赛的最终结果。TT 非常诧异,不仅诧异于他的小猫咪居然会说话,更诧异于这可爱的小不点为何有如此魔力? 魔法猫告诉 TT,它其实拥有一张游戏胜负表,上面有 N 个人以及 M 个胜负关系,每个胜负关系为 A B,表示 A 能胜过 ...

weixin_44987764的博客 343

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4657

STM32F4_DHT11数字温湿度传感器

开机的时候先检测是否有DHT11存在,如果没有,则提示错误。DHT11和DS18B20相同,传感器输出的都是未编码的二进制数字。本节我们将利用STM32F4来读取DHT11的温湿度传感器,获取环境的温度和湿度值。因此:温湿度的读取方式就是整数部分的二进制转换成十进制放在整数部分;小数部分的二进制转换成十进制放在小数部分。DHT11和MCU的一次通讯时间最大3ms,主机连续向DHT11采样的间隔建议不小于100ms。DHT11是广州奥松有限公司生产的一款温湿度一体化的数字传感器。数据分小数部分和整数部分。

light_2025的博客 3432

图论模型笔记

图论模型笔记

CourserLi的博客 1820

Amber实战:小分子配体MD模拟全流程避坑指南(附磷酸基团处理技巧)

本文提供了一份基于Amber软件进行小分子配体分子动力学模拟的实战避坑指南。详细解析了从晶体结构预处理、配体参数化(重点探讨AM1-BCC与RESP电荷选择)、复合物体系构建到模拟稳定性调试的全流程。特别针对磷酸基团等特殊官能团处理中常见的模拟崩溃问题,给出了系统性的诊断与解决方案,旨在帮助研究者获得稳定可靠的模拟结果。

weixin_29237635的博客 682

一文讲完最基本的图算法——图的存储、遍历、最短路径、最小生成树、拓扑排序

预计会有的算法有DFS,BFS,最短路径Dijskra,最小生成树算法Prim,Kruskal,拓扑排序,慢慢更新吧。这些应该都是基础,再复杂一点的算法我自己也不会了,慢慢学习了。 图的表示 图的概念就不赘述了,应该一搜一大把,我再继续讲概念也没有意义。 从有 ...

一只菜鸡的博客 1779

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1043

isaaclab无法识别NVIDIA显卡,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1146
上一篇: openjudge-noi-3.6-1758:二叉树
下一篇: oj-【基础图论】亲戚
dogeding
博客等级 码龄10年 31粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值