1090. Highest Price in Supply Chain (25)[dfs树的遍历]

本文提供了一道 PAT-A 1090 的解题思路与实现代码,通过DFS算法求解一棵树的最大层次及其同层结点数,并计算基于初始价格与加价比率的最高价格。

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

1. 原题: https://www.patest.cn/contests/pat-a-practise/1090

2. 思路:

题意:
给出一颗树,求出树的最大层次及同层的结点数。
思路:
显然可以用dfs,每次递归,层次加1.
也可用bfs.
为求简便,用dfs。
已AC

3. 源码:

#include<iostream>
#include<vector>
#include<algorithm>//使用pow函数,用来求指数
using namespace std;

int level = 0, N;//分别为树的最大层次, 结点数
int cnt = 0;//同一层次的结点数
vector< vector<int> > G;//图的邻接表表示
void dfs(int root, int deep);//dfs递归求最大层次

int main(void)
{
	//freopen("in.txt", "r", stdin);
	int root;//树的根
	double price, rate;//分别为初始价, 加价比率
	scanf("%d %lf %lf", &N, &price, &rate);
	G.resize(N);

	for (int i = 0; i < N; i++)//读入数据
	{
		int parent;//父结点编号
		scanf("%d", &parent);
		if (parent == -1)//找到了根结点
			root = i;
		else
			G[parent].push_back(i);//压入父结点的容器
	}

	dfs(root, 0);//递归求出层次level和个数cnt
	double max_price = price * pow((1 + rate / 100), double(level));//最高价
	printf("%.2f %d\n", max_price, cnt);

	return 0;
}

void dfs(int root, int deep)//dfs递归求最大层次
{
	if (G[root].empty())//表示到了叶子结点,递归结束
	{
		if (level < deep)//更新树深和个数cnt
		{
			level = deep;
			cnt = 1;
		}
		else if (level == deep)
			cnt++;

		return;
	}

	for (int i = 0; i < G[root].size(); i++)//递归子树
		dfs(G[root][i], deep + 1);
	return;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值