存储图的方式

本文介绍存储图的方式以及stl一些用法
1.用邻接表存储图

struct Edge{
	int to;
	int next;	
	Edge(){
		next=0;
	}
}; //构建一条边
void addEdge(int from,int to){
	num++;
	e[num].next=head[from];
	e[num].to=to;
	head[from]=num;
}//添加边的方式,from为起点,to为终点
for(int i=head[v];i!=0;i=e[i].next){

	}//遍历以v为起点的各个邻接点

解析:head数组用于存储各点作为起点,所连接的边。例如head【1】是编号为1的点中一条边所指向的点的num。

2.stl实现优先队列`

struct Node2
{
	int val;
	int id;
}arr2[100];
bool operator <(const Node2 &a,const Node2 &b)
{
	return a.val<b.val;//大根堆
}
priority_queue<Node2>q2;
q2.push(arr2[i]);//插入元素
	 while(!q2.empty())
	 {
	 	cout<<q2.top().val;
	 	q2.pop();
	 }//遍历元素

3.stl实现平衡树(寻找某节点的前驱和后继,效果同双向链表)

struct Node
{
	int id,al;
	 friend bool operator <(Node a,Node b)
	{
		return a.al<b.al;
	}
}arr[100];
multiset<Node> q;//也可改为set去除重复元素
q.insert(arr[i]);//元素的插入
	 multiset<Node>::iterator it;//构建迭代器 
	 Node now;
	 now.al=9;
	 for (it=q.begin();it!=q.end();it++)
	 {
	 	cout<<(*it).al<<" ";//元素的遍历
	 }
	 it=q.lower_bound(now);//元素的查找
	 cout<<(*it).al<<" ";
	 it=q.upper_bound(now);
	 cout<<(*it).al<<" ";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

19lrf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值