首页 > 编程语言 >Floyd算法(计算最短路径)

Floyd算法(计算最短路径)

时间:2024-05-30 16:26:49浏览次数:15  
标签:结点 int graph 距离 最短 算法 Floyd 二叉树 节点

[JLOI2009] 二叉树问题

题目描述

如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:

  • 深度:$4$
  • 宽度:$4$
  • 结点 8 和 6 之间的距离:$8$
  • 结点 7 和 6 之间的距离:$3$

其中宽度表示二叉树上同一层最多的结点个数,节点 $u, v$ 之间的距离表示从 $u$$v$ 的最短有向路径上向根节点的边数的两倍加上向叶节点的边数。

给定一颗以 1 号结点为根的二叉树,请求出其深度、宽度和两个指定节点 $x, y$ 之间的距离。

输入格式

第一行是一个整数,表示树的结点个数 $n$
接下来 $n - 1$ 行,每行两个整数 $u, v$,表示树上存在一条连接 $u, v$ 的边。
最后一行有两个整数 $x, y$,表示求 $x, y$ 之间的距离。

输出格式

输出三行,每行一个整数,依次表示二叉树的深度、宽度和 $x, y$ 之间的距离。

样例 #1

样例输入 #1

10                                
1 2                            
1 3                            
2 4
2 5
3 6
3 7
5 8
5 9
6 10
8 6

样例输出 #1

4
4
8

提示

对于全部的测试点,保证 $1 \leq u, v, x, y \leq n \leq 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;
}

标签:结点,int,graph,距离,最短,算法,Floyd,二叉树,节点
From: https://www.cnblogs.com/rjxq/p/18222584

相关文章

  • TF-IDF算法
    TF-IDF(termfrequency–inversedocumentfrequency,词频-逆向文件频率)TF-IDF本质上是一种统计方法,用来评估一个词/token在整个语料库中当前文档中的重要程度,字词的重要性随着它在当前文档中出现的频率成正比增加,随着它在整个语料库中出现的频率成反比降低。主要思想:某个单词在当......
  • 编程奇境:C++之旅,从新手村到ACM/OI算法竞赛大门(基础语法)
    踏入C++王国的神秘之门,首要任务是装备上基础语法这把万能钥匙,它不仅是你与代码世界对话的初级咒语,更是构筑编程魔法塔的基石。想象自己是一位即将踏上征途的勇士,先要学会站立、行走,方能奔跑、飞跃。基础语法:勇者的起跑线顺序结构:这就像是一场精心策划的冒险,你的每一个指令—......
  • 树上点到路径/链的最短距离
    结论树上一个点\(x\)到路径\(u\rightarrowv\)的最短距离为:\[dep[x]+dep[\operatorname{lca}(u,v)]-dep[\operatorname{lca}(x,u)]-dep[\operatorname{lca}(x,v)]\]其中,\(dep\)为该点的深度,\(\operatorname{lca}\)为两点的最近公共祖先。证明我们提取出同时包含\(x,u,......
  • 基于 MATLAB 的麻雀算法 (SSA) 优化注意力机制卷积神经网络结合门控循环单元 (SSA-Att
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)基于MATLAB的麻雀算法(SSA)优化注意力机制卷积神经网络结合门控循环单元......
  • 算法课程笔记——快速幂
    算法课程笔记——快速幂......
  • 常见的算法题
    冒泡排序privatestaticint[]queryArr(int[]arr1){intlen=arr1.length;if(len==0||len==1){returnarr1;}        for(inti=0;i<len;i++){            for(intj=0,lenArr=len-1-i;j<lenArr;j++){    ......
  • 基于Matlab OMP和KSVD算法的彩色图像修复
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义在数字图像处理领域,图像修复技术一直是一个重要的研究方向。彩色图像修复旨在恢复图像中由于各种原因(如划......
  • 十四.吊打面试官系列-JVM优化-JVM垃圾回算法详解
    前言说到JVM不可避免的会聊到垃圾回收器,(GarbageCollection,简称GC)。它负责跟踪哪些对象仍然在使用,哪些对象已经不再被引用,并释放那些不再被引用的对象所占用的内存空间。这一过程涉及到对象的标记、清除、压缩等多个阶段,每个阶段都有其特定的算法和策略。随着Java技术的不......
  • 基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述水印嵌入原理   水印提取原理: 将嵌入水印的图像再次进行二维CS-SCHT变换。 提取变换后的低频系数,并按照嵌入时的规则去除宿主图像内容的影响,恢复出水印信息Wm′​。  ......
  • C语言实现排序之冒泡排序算法
    1.代码#include<stdlib.h>#include<stdio.h>#include<time.h>//函数声明//创建并生成一个包含随机数的数组,数组大小由参数size指定int*create_and_generate_random_array(intsize);//打印数组内容,参数array是数组指针,size是数组大小voidprint_array(int*arr......