Floyd算法详解:计算二叉树的深度、宽度及节点间距离
创作时间:
作者:
@小白创作中心
Floyd算法详解:计算二叉树的深度、宽度及节点间距离
引用
CSDN
1.
https://m.blog.csdn.net/2301_79868199/article/details/139327141
Floyd算法是一种用于计算图中任意两点间最短路径的经典算法。本文通过一个具体的二叉树问题,详细介绍了Floyd算法的实现过程和应用场景,对于理解算法原理和实际应用都有很大的帮助。
[JLOI2009] 二叉树问题
题目描述
如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:
- 深度:4 44
- 宽度:4 44
- 结点 8 和 6 之间的距离:8 88
- 结点 7 和 6 之间的距离:3 33
其中宽度表示二叉树上同一层最多的结点个数,节点u , v u, vu,v之间的距离表示从u uu到v vv的最短有向路径上向根节点的边数的两倍加上向叶节点的边数。
给定一颗以 1 号结点为根的二叉树,请求出其深度、宽度和两个指定节点x , y x, yx,y之间的距离。
输入格式
第一行是一个整数,表示树的结点个数n nn。
接下来n − 1 n - 1n−1行,每行两个整数u , v u, vu,v,表示树上存在一条连接u , v u, vu,v的边。
最后一行有两个整数x , y x, yx,y,表示求x , y x, yx,y之间的距离。
输出格式
输出三行,每行一个整数,依次表示二叉树的深度、宽度和x , y x, yx,y之间的距离。
样例 #1
样例输入 #1
10
1 2
1 3
2 4
2 5
3 6
3 7
5 8
5 9
6 10
8 6
�ample输出 #1
4
4
8
提示
对于全部的测试点,保证1 ≤ u , v , x , y ≤ n ≤ 100 1 \leq u, v, x, y \leq n \leq 1001≤u,v,x,y≤n≤100,且给出的是一棵树。
解题思路
求树的深度,就是求节点到根节点的距离最大值。
求树的宽度,就是求同一深度节点(到根节点距离相同)的数量最大值。
Floyd算法
计算任意两点的最短路径
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
graph[i][j] = MIN(graph[i][j], graph[i][k]+graph[k][j]);
}
}
}
计算通过k处,i节点到j节点的最短距离
AC代码
#include<bits/stdc++.h>
using namespace std;
#define MAX(a, b) ((a)<(b)?(b):(a))
#define MIN(a, b) ((a)<(b)?(a):(b))
int n;
int graph[100][100];
int main() {
cin >> n;
int u, v;
memset(graph, 0, sizeof(graph));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i != j) graph[i][j] = INT_MAX/2;
}
}
for (int i = 0; i < n-1; i++) {
cin >> u >> v;
graph[u][v] = 1;
graph[v][u] = 2;
}
cin >> u >> v;
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
graph[i][j] = MIN(graph[i][j], graph[i][k]+graph[k][j]);
}
}
}
int depth = 0, width = 0, max = 0;
int d[100] = {0};
for (int i = 2; i <= n; i++) {
depth = MAX(graph[1][i], depth); // 枚举到根节点的深度
d[graph[1][i]]++; // 不同深度计数
}
for (int i = 1; i <= depth; i++) {
width = MAX(d[i], width); // 遍历不同深度的节点数量,计算最大值
}
cout << depth+1 << endl; // 根节点深度为1
cout << width << endl;
cout << graph[u][v] << endl;
}
热门推荐
毕业季花式致谢大赏,“诗经”体太有才了
如何优化SaaS云服务以提升企业运营效率与成本控制?
Excel中快速提取关键字的四种实用方法
岳飞被杀后,秦桧是如何处置他的妻子和女儿的?说出来你可能不信
耶鲁毕业生秦玥飞:放弃百万年薪,扎根贺家山村14年
怎么查学校专业代码?附2025年全国大学代码及专业代码查询地址
职场女性的5分钟高效早餐:家常食材打造元气早晨
银行卡被冻结怎么办?律师能否帮忙处理?
开源的容器编排平台:Kubernetes(简称K8s)
今年主板首单,华润新能源IPO申请获深交所受理,拟募资245亿元
表情包的作用
EViews怎么将Excel录入
KPL春季赛数据盘点:后羿成最强开团英雄,大乔禁用率高达78.9%
中国绿化基金会“雪豹守护行动”项目成就综述
零跑充电桩选 7kW 还是 11kW?一文详解对比分析和申请流程
中国船舶集团重大资产重组背后
Win11系统能加装硬盘吗?如何检查兼容性?
阻性、感性、容性负载介绍
左侧交易和右侧交易的定义和区别是什么?这两种策略各有什么优缺点?
1Mbps网速也能畅享移动互联网?15个实用场景全解析
马王堆女尸为何保持千年不腐?出土的《道德经》颠覆了道家思想
运动后喝牛奶好吗
幼小衔接必备-让孩子秒懂20以内的加减法!
世界杯足球阵型的演变(从经典到现代,一场战术的变革)
如何选择正宗的河套面粉?
酮康唑还是二硫化硒?听听医生怎么说
手上起皮是什么原因造成的
吃宵夜也能好好睡
如何创办餐馆生意:成功的 6 个步骤
“从无到有”到“全面开花” 我国空间科学研究闪耀太空