2022/12/28总结

news2024/11/20 7:07:05

今天AC了一道题(后面的题目对我来说好难,刷不动了)

P2895 [USACO08FEB]Meteor Shower S

P2895 [USACO08FEB]Meteor Shower S_lxh0113的博客-CSDN博客

学的新知识:

dijkstra算法

dijkstra算法是求最短路径的算法。相比较于floyd算法,这个的时间复杂度更小。

我们以下图为例子:找出从A点到其余各点的最短距离。 

先得到这张表:

 

 从A点到A点我们最短路径为0,所以刷新A点最短路径。为0.

从A点可以去B点和C、D点,都比所对应的无穷要小,所以先刷新,加上刷新前节点。

 

从A点延生是B,C,D点,找到最小的路径,是D点.  所以我们从D点延生,先确定D点已经是最佳路径,从D点能去B,E,F点。
我们发现从D点到的B点的值是12,比B存储的值是要大的,所以我们不刷新它。从D点到F点是2+7=9,所以我们刷新F点的最短路径是9。从D点到E点是2+9=11,所以E点是11.如下图所示

黄色代表是已经确立的最短路径,然后从剩下的里面选择最短的数字,是B点,把它变黄,我们从B点延生,B只能去F点,B点到F点是5+4=9,相同,那我们可以不用刷新它。
我们每次都从剩下的里面找最短的,确立它,然后从它延生看接下来能到哪里,如果小于当前的值,我们就刷新它,最后我们会得到一个A到其他点都是最短路径的结果。

 揭秘为什么要记住前一个结点,我们可以从这里找到路径。

打一个比方如果我们要找A到F点的最短路径节点,那么找到F点,F点所记录的前驱节点是D,我们找到D,D的前节点是A,所以找到了

A->D->F,是A到F最短距离。

Bellman-Ford算法

Dijkstra算法是很好,都是不能解决路径为负值的情况。所以就有了Bellman-Ford算法,它能解决这个问题。

因为如果出现负数,那么每次转一次圈都会使最小路径刷新,就没有最短路径。

我们把这个表变成下面这样 (因为这个是无向图,就是没有方向的图,所以需要全部列完)

 这个算法的思路是:

1.我们需要外循坏遍历n个节点-1次,因为最多需要遍历n-1次就能得到最优解。内循环是遍历所有的边。

2.我们需要遍历每条边找到边的终点所对应的min数组(这是存储最小路径的数组)的值,看这个值是否比访问的节点u[i[加上该访问节点到终点节点的路径也就是w[i],代码是

if(min[v[i]]>min[u[i]]+w[i])
                min[v[i]]=min[u[i]]+w[i];

3.从上面不难看出,在k=1时,就已经得出了最小路径,(这个例子没取好),如果存在负环路时,每次外循坏都会使min数组变小。而变小是没有截止的。所以我们最多需要n-1次外循坏即可。

4.我们因为每条边都会遍历,所以我们会慢慢的得到最短路径。

5.需要注意的是min数组需要赋初值,都要赋值成最大(我这里写的是9999999),第一个除外,因为第一个顶点到自己永远是0,所以是确立的。

所以代码是:

#include<stdio.h>
#define N 100
#define MAX 999999
int u[N],v[N],w[N],min[N];
int bellman(int n,int m)
{
	int i,j;
	for(i=1;i<n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(min[v[i]]>min[u[i]]+w[i])
				min[v[i]]=min[u[i]]+w[i];
		}
	}
}
int main()
{
	int n,m,i;
	puts("请输入你所要的顶点:");
	scanf("%d",&n);
	for(i=2;i<=n;i++)
	{
		min[i]=MAX;
	}
	puts("请输入边的总数:");
	scanf("%d",&m);
	puts("请输入各顶点与终点和边长:");
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&u[i],&v[i],&w[i]);
	}
	bellman(n,m);
	for(i=1;i<=n;i++)
	{
		printf("1-%d is %d\n",i,min[i]);
	}
	return 0;
}

最后答案是:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【真干货】Activiti7工作流如何使用?看这里

一. 前言 近日文哥有个毕业学员在公司开发时遇到了工作流的相关业务场景。在这里&#xff0c;文哥给大家精心准备了以Activiti为代表的工作流简单使用教程&#xff0c;希望能给有需要的小伙伴们一些帮助。下面我们就来开始介绍Activiti工作流的基本使用情况。 二. Activiti工…

利器 | Java 接口自动化测试首选方案:REST Assured 实践 (一)

在 REST Assured 的官方 GitHub 上有这样一句简短的描述&#xff1a; Java DSL for easy testing of REST services 简约的 REST 服务测试 Java DSL REST Assured 官方的 README 第一句话对进行了一个优点的概述&#xff0c;总的意思表达的就是简单好用。那么 REST Assured 有…

dolphinscheduler 调用shell脚本执行sql

1. 资源中心--创建文件 脚本&#xff1a; #!/bin/bash hive <<EOF alter table app.app_bi_test drop partition (dayid$1); insert overwrite table app.app_bi_test partition(dayid) select a.Ccode,a.inCcode ,a.Cname ,$1,COALESCE(b.num,0) ,COALESCE(c.c_num…

以前的任何一个行业只要与互联网技术产生联系,便焕发生机与活力

事实上&#xff0c;以往&#xff0c;我们所经历的那个互联网玩家频出的年代&#xff0c;其实就是一个以互联网技术为主导的年代。在那样一个年代里&#xff0c;互联网技术几乎是解决一切痛点和难题的万能解药&#xff0c;几乎是破解一切行业痛点和难题的杀手锏。任何一个行业&a…

XXE渗透与攻防(一)

目录 前言 XML基础知识 XML用途 XML内容 XML格式要求 XML格式校验 不同语言支持的协议 完整的XML内容 什么是XXE 案列演示 盲打-DNSLog XXE 防御 前言 现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息&#xff0c;为了使应用程序使用自定义的XML消…

高压放大器在介电泳分选的应用

实验名称&#xff1a;基于高压放大器的介电泳分选 研究方向&#xff1a;滴液分选 测试原理&#xff1a; 在非均匀电场中&#xff0c;介电体表面感生出的正负电荷处于不同场强的位置上在它受到的合力大于一定值时就会被拉向强电场方向。 测试设备&#xff1a;ATA-7030高压放大器…

类与对象(下)

类与对象构造函数构造函数体赋值初始化列表explicit关键字static成员概念特性友元友元函数友元类内部类匿名对象拷贝对象时的一些编译器优化构造函数 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值 clas…

勃仔诞生记:Hubbleverse哈勃元宇宙的起源故事

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;9分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 想象一个属于你的世界&#xff0c;一个资源丰富的世界&#xff0c;你可以在其中…

Android TV刷机Mstar篇——以乐视超4-X50Pro为例

家里这台乐视使用好几年了&#xff0c;最近闲来无事&#xff0c;就琢磨着刷一刷&#xff0c;打造一个纯净使用体验。 记录下刷机历程&#xff0c;方便后期再查看。 一、准备工作 1、下载刷机固件&#xff0c;这里使用了ZNDS大神出的包。 超4X43 Pro/超4X50 Pro通用流畅精简…

pytorch应用(入门1)

目录学习用具张量的定义和运算Variable&#xff08;变量&#xff09;Dataset数据集之前一直是拿一个个项目来学pytorch&#xff0c;感觉不是很系统&#xff0c;借着假期的机会系统学一下。预计先把入门的知识一周学完吧。 学习用具 《深度学习入门之Pytorch》廖星宇 在Z-lib…

数字孪生流域建设及其应用

2021年底水利部召开推进数字孪生流域建设工作会议&#xff0c;会议按照“需求至上、应用至上、数字赋能、提升能力”要求&#xff0c;以数字化、网络化、智能化为主线&#xff0c;以数字化场景、智慧化模拟、精准化决策为路径&#xff0c;以算据、算法、算力建设为支撑&#xf…

美国服务器安全吗?如何进行安全检测和使用?

对服务器安全检测是保证稳定运行的一种方式&#xff0c;尤其面向海外的一些用户&#xff0c;因为使用的服务器无法时刻检查&#xff0c;对安全系数要求又很高。因此&#xff0c;在租用前和使用时进行安全检测是十分有必要的。那么&#xff0c;美国服务器怎么进行安全检测呢? 一…

为深度学习选择最好的GPU

在进行机器学习项目时&#xff0c;特别是在处理深度学习和神经网络时&#xff0c;最好使用GPU而不是CPU来处理&#xff0c;因为在神经网络方面&#xff0c;即使是一个非常基本的GPU也会胜过CPU。 但是你应该买哪种GPU呢?本文将总结需要考虑的相关因素&#xff0c;以便可以根据…

直播倒计时1天!“基于AIOps的全面可观测性网络研讨会”与你不见不散

当企业云化不断加速&#xff0c;应对重复冗杂的运维活动&#xff0c;引入智能算法的AIOps已成发展趋势&#xff1a; 高效定位故障来源&#xff0c;保证数字业务稳定可靠运行&#xff0c;深挖数据价值促进企业创新……AIOps能做的还有很多。 想了解更多关于AIOps的相关内容&am…

Spring注册Bean系列--方法4:@Import+ImportSelector接口

原文网址&#xff1a;Spring注册Bean系列--方法4&#xff1a;ImportImportSelector接口_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;ImportImportSelector接口。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Be…

php宝塔搭建部署实战SDCMS蓝色系列包装行业网站源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的SDCMS蓝色系列包装行业网站源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&…

房产管理系统平台架构求分析

数图互通房屋管理系统遵循高校房产“分级授权、分类管理、网络化、图形化、精细化、流程化”的管理理念&#xff0c;在资产管理部门统一管理全校房产的前提下&#xff0c;注重二级单位在房产管理中的参与&#xff0c;注重针对不同类型类别房产的分类管理提高学校房产的使用效率…

加强舆情监控有哪些方法,互联网舆情监控平台有哪些?

加强舆情监控是指企业通过提升监控能力&#xff0c;更好地了解公众对其产品、服务、品牌形象等的看法&#xff0c;并及时采取应对措施。接下来TOOM舆情监测小编带您简单了解加强舆情监控有哪些方法&#xff0c;互联网舆情监控平台有哪些&#xff1f; 企业可以通过以下方式加强舆…

C# 并行编程

一 并行任务库TPL 1 并行任务库&#xff08;TPL&#xff0c;Task Parallel Library&#xff09; 2 最重要的是Task类&#xff0c;还有Parallel类 3 Task类&#xff0c;是利用线程池来进行任务的执行 比如直接用ThreadPool更优化&#xff0c;而且编程更方便 4 Paallel类&…

右值引用与移动语义

目录 一、左、右值引用 1.1 什么是左值 1.2 什么是右值 1.3 右值引用特性 1.4 move语义 二、左、右值引用的比较 三、右值引用的使用场景 3.1 左值引用的短板 3.2 解决方案 四、移动构造与移动赋值 注意情况 五、万能引用与完美转发 5.1 万能引用 5.2 完美转发 …