加入到队列中的数据的值将不能改变,所以使用把结构体加入到队列中并进行更新加入的结构体的值的做法是不可行的 (这也就导致使用优化版迪杰斯特拉算法时不能使用将每个点的序号以及距离初始点的最短距离包含起来的结构体,因为这将导致不能对队列中的结构体内的距离进行更新, 而只能将序号加入到队列中,因为距离是需要 ...
分类:
编程语言 时间:
2018-03-01 21:44:03
阅读次数:
219
二项堆(一)之 图文解析 和 C语言的实现 概要 本章介绍二项堆,它和之前所讲的堆(二叉堆、左倾堆、斜堆)一样,也是用于实现优先队列的。和以往一样,本文会先对二项堆的理论知识进行简单介绍,然后给出C语言的实现。后续再分别给出C++和Java版本的实现;实现的语言虽不同,但是原理一样,选择其中之一进行 ...
分类:
其他好文 时间:
2018-02-24 14:51:06
阅读次数:
270
1、概述 队列是一种满足先进先出(FIFO)的数据结构,数据从队列头部取出,新的数据从队列尾部插入,数据之间是平等的,不存在优先级的。这个就类似于普通老百姓到火车站排队买票,先来的先买票,每个人之间是平等的,不存在优先的权利,整个过程是固定不变的。而优先级队列可以理解为在队列的基础上给每个数据赋一个 ...
分类:
其他好文 时间:
2018-02-23 16:00:39
阅读次数:
211
最近看了算法竞赛入门经典,里面有关于C++STL的部分,借此简单总结一下书中提到的用法,等自己复习的时候好翻出来查看 1、排序(sort) 在algorithm头文件中,已经写好了许多常用的算法,其中排序算法时经常使用的算法 以上是sort函数的原型,有两种使用方法,一种是给出迭代器的头和尾,sor ...
分类:
其他好文 时间:
2018-02-23 13:21:36
阅读次数:
167
实现优先队列结构主要是通过堆完成,主要有:二叉堆、d堆、左式堆、斜堆、二项堆、斐波那契堆、pairing 堆等。 1. 二叉堆 1.1. 定义 完全二叉树,根最小。 存储时使用层序。 1.2. 操作 (1). insert(上滤) 插入末尾 26,不断向上比较,大于26则交换位置,小于则停止。 (2 ...
分类:
其他好文 时间:
2018-02-23 12:02:40
阅读次数:
199
P2827 蚯蚓 AC代码: 80分优先队列代码:(注意:手打堆会更快一些,能拿到85分或以上,原理跟优先队列一样) ...
分类:
其他好文 时间:
2018-02-21 21:42:17
阅读次数:
158
该算法思想就是 1)首先找离起点最近的点 2)然后对该点进行标记,并且对与该点相邻的点进行松弛(也就是更新周围点离起点的距离最小值) 3)继续找更新之后的图中离起点最近的未被标记的点 具体的实现方式有两种: 方式一时间复杂度是O(n^2),具体实现方式是通过两个for循环实现(其中内层循环负责找最近 ...
分类:
编程语言 时间:
2018-02-21 15:49:59
阅读次数:
155
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 题目: Problem Description 糟糕的事情发生啦,现在大家都忙着逃命。但是逃命的通道很窄,大家只能排成一行。现在有n个人,从1标号到n。同时有一些奇怪的约束条件,每个都形如:a必须 ...
分类:
编程语言 时间:
2018-02-21 12:23:54
阅读次数:
225
我们所写的最小生成树主要有两种,分别是Prime和Kluskal。 注:n表示节点数,m表示边数。 一、Prime算法 Prime算发是一种对点的枚举算法,算法实现的实质是贪心,即每次加入的点都是离已知生成树部分最近的点,加入生成树一个新的点的同时更新还未加入的点与生成树的最小距离,所以整个时间复杂 ...
分类:
其他好文 时间:
2018-02-16 22:54:29
阅读次数:
215
- 题目大意 有一系列的事件,它每Period秒钟就会产生编号为qNum的事件,你的任务是模拟出前k个事件,如果多个事件同时发生,先处理qNum小的事件 - 解题思路 很多相同的数值在同一时刻内,数值小的先输出,那么就是求若干个中最小的,那么就可以用优先队列进行维护。 - 代码 ...
分类:
其他好文 时间:
2018-02-15 13:56:13
阅读次数:
201