哈哈……

本文展示如何使用C++标准库中的make_heap和push_heap函数实现堆排序,并通过具体示例进行说明。代码中首先创建了一个包含10个元素的数组,接着演示了如何将这些元素构建成最大堆。

#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;

int main()
{	
	int a[]={5,1,9,4,6,2,0,3,8,7};
	make_heap(a,a+10,less<int>());
	cout<<"make_heap:";
	copy(a,a+10,ostream_iterator<int>(cout," "));
	cout<<endl;

	int b[]={5,1,9,4,6,2,0,3,8,7};
	vector<int> heap;
	for(int i=0;i<10;i++)
	{
		heap.push_back(b[i]);
		push_heap(heap.begin(),heap.end(),less<int>());
	}
	cout<<"push_heap:";
	copy(heap.begin(),heap.end(),ostream_iterator<int>(cout," "));
// 
// 	heap.push_back(b[8]);
// 	heap.push_back(b[9]);
// 
// 	cout<<"push_heap:";
// 	for(int i=0;i<10;i++)
// 		cout<<heap[i]<<" ";
// 	cout<<endl;
// 
// 	push_heap(heap.begin(),heap.end(),less<int>());
// 	for(int i=0;i<10;i++)
// 		cout<<heap[i]<<" ";
// 	cout<<endl;
// 
// 	copy(heap.begin(),heap.end(),ostream_iterator<int>(cout," "));
}


[插入]



也许你从没听说过阿卑多,但你一定知道他爷爷的爷爷的爷爷,那就是聪明绝顶的阿凡提先生。是的,阿卑多也是个聪明的小孩。 一天,阿卑多骑着他的小毛驴,在小镇上晃悠,小镇上的路都是双向的。正好遇上了小巴依——那个自以为是的小财主。小巴依正在炫耀他的金币:“你们见过这样的金币么?这可不是一般的金币,你看它们多大多重啊!最主要的是,它们每个上面都刻有我的名字和一个编号,是独一无二的!看看,从我出生开始,每2个月,爸爸便给我1个特做的大金币,并从1开始编号,现在我已经有60枚了,哈哈……” 小巴依见了阿卑多,于是便想考一考他:“阿卑多,听说你是最聪明的。给你任意三个顶点 A A, B B, C C,问你从顶点 A A 走到顶点 B B 并且经过顶点 C C的 最短路径的条数有多少?如果你能算出,那么就奖你一枚金币;如果不能,就给我做三年长工好了。” 阿卑多想了一想,自己完成没有多大的问题,现在他想来考考学习信息学奥赛的你,请你编程帮助他来顺利的完成。 【输入格式】 输入的第一行为两个正整数 m m 、 n n , m m 表示顶点的个数, n n 表示边的条数 第二行为三个整数 A A , B B 和 C C, A A 表示起点, B B 表示终点, C C 表示要问你经过那个顶点; 接下来有 n n 行分别表示两条相临的边的编号及距离; 【输出格式】 输出从顶点 A A 到顶点 B B ,经过 C C 这个顶点的最短路径的条数。 【样例输入1】 4 5 1 4 2 1 2 2 1 3 1 2 4 2 2 3 1 3 4 3 【样例输出1】 2 【样例1解释】 无 【数据范围及约定】 0 < m ≤ 1000 , n ≤ 499500 0<m≤1000,n≤499500 ,所有数据计算过程中都不会超过 i n t int ;
最新发布
11-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值