- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
// 方法一
// 建立最小值堆
// 此方法类似于 课本中的 Dijkstra 算法
// 首先 要建立两个结构 一个要储存所给的点的信息 另外一个纪录边的信息
// 然后建立一个最小值堆
#includeiostream.h
// 建立纪录当前点的信息 的结构
struct Point
{
int tag; // 纪录点的下标
char colour; // 纪录点的颜色
int ric; // 纪录当前颜色还能够持续的时间
int tib; // 纪录每次 Blue 颜色所持续的时间
int tip; // 纪录每次 Purple 颜色所持续的时间
int isvisit; // 纪录当前节点是否已经被走过了
int time; // 纪录当前结点的时间
}point[300]; // 申请一个 300 大小的数组用来储存结点
// 建立记录当前路径信息 的结构
struct Road
{
int time; // 纪录要经过当前路径的时间
int index; // 路径索引
};
// 建立一个 Road 类型的最小值堆
templateclass Road
class Heap
{
public:
Road * heap; // 存放对数据的数组
int currentSize; // 纪录当前对中元素的个数
int maxSize; // 堆所能够容纳的最大的元素数目
void Insert(Road newNode); // 向堆中插入元素 newNode
Road RemoveMin(); // 从堆顶删除一个最小的元素
void ShiftUp(int position); // 从 position 向上开始调整,使序列成为一个堆
void ShiftDown(int left); // 筛选法函数 参数 left 开始处理下标
void swap(int pos_x,int pos_y); // 交换函数
Heap(const int n); // 构造函数
virtual ~Heap(){delete []heap;} // 析构函数
};
// 构造函数
templateclass Road
HeapRoad::Heap(const int n)
{
// 设置当前 堆中的情况
currentSize=0;
maxSize=n;
// 动态申请数组 创建堆空间
heap=new Road [n];
}
// 插入函数
templateclass Road
void HeapRoad::Insert(Road newNode)
{
// 把 newNode 插入到堆的最后
heap[currentSize]=newNode;
// 从最下面开始向上调整
ShiftUp(currentSize);
// 堆的当前大小 加一
currentSize++;
}
// 调整堆的函数
templateclass Road
void HeapRoad::ShiftUp(int position)
{
// 首先对要调整的对象进行记录
// 从 position 开始向上调整 使得堆有序
int temppos=position;
Road temp=heap[temppos];
while(temppos0)
{
// 得到其父节点的下标
int n=(temppos-1)/2;
原创力文档


文档评论(0)