Peter算法小课堂—树的应用

本文介绍了C++中的Vector数据结构,以及如何使用邻接表表示树并执行添加边、输出和深度优先搜索(DFS)的基本操作,用于解决实际问题如1645题的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开篇先给大家讲个东西,叫vector,有老师称之为“向量”,当然与数学中的向量不一样啊,所以我要称之为“长度可变的数组”

vector

头文件:#include <vector>

用法:vector<int> d;

尾部增加元素:d.push_back(……);

元素个数:d.size()

数组方括号操作:d[i]

尾部删除元素:d.pop_back(……);

清空数组:d.clear();

树 

树的概念:c++ 图论-优快云博客

一般,树的表示用邻接表来表示,表达形式是vector<int> to[N];

那邻接表加边呢?如下

void add(int u,int v){
	to[u].push_back(v);
	to[v].push_back(u);
}

邻接表输出呢?

for(int u=1;u<=n;u++,cout<<endl)
	for(int i=0;i<to[u].size();i++)
		cout<<to[u][i];

输入所有边的端点呢?

void input(){
	cin>>n;
	for(int i=1;i<=u-1;i++){
		int u,v;
		cin>>u>>v;
		add(u,v);
	}
}

输入父节点呢?

void input(){
	cin>>n;
	for(int u=2;u<=n;u++){
		cin>>p[u];
		add(u,p[u]);
	}
}

输入儿子节点呢?

void input(){
	cin>>n;
	int c,v;
	for(int u=1;u<=n;u++){
		cin>>c;
		for(int i=0;i<c;i++){
			cin>>v;
			add(u,v);
		}
	}
}

dfs会吗?解决。1645题尝试一下,下一篇发题解

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值