floyed 4.9

news2025/1/27 12:03:33

今天是周末,也就不为难自己了,学习了一下floyed算法(确实简单哈哈),这个算法也是最短路的一种

在一副图中,a到b的距离可能不是直接的ab边最短,这时候就要用到floyed的思想了,可能是a到c到b比直接a到b最短.所以我们要枚举一边才可以知道a到b的最短的路线

这就是floyed的大概

核心的代码也很简单

for(int h=1;h<=n;h++){//floyed
    for(int g=1;g<=n;g++){
        for(int b=1;b<=n;b++){
            if(h!=g&&g!=b&&b!=h&&a[g][b]>a[g][h]+a[h][b])
            a[g][b]=a[g][h]+a[h][b];

            }
        }
    }

就这末一点点 (很暴力,我一点也不喜欢)

但对于数据不大的题目还是非常的友好的(因为好写)

这是有边权的,要是没有边权,那么就只要判断0或者1就好了

学了就要训练一下

# 医院设置

## 题目描述

设有一棵二叉树,如图:

![](https://cdn.luogu.com.cn/upload/pic/166.png)

其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为 $1$。如上图中,若医院建在1 处,则距离和 $=4+12+2\times20+2\times40=136$;若医院建在 $3$ 处,则距离和 $=4\times2+13+20+40=81$。

## 输入格式

第一行一个整数 $n$,表示树的结点数。

接下来的 $n$ 行每行描述了一个结点的状况,包含三个整数 $w, u, v$,其中 $w$ 为居民人口数,$u$ 为左链接(为 $0$ 表示无链接),$v$ 为右链接(为 $0$ 表示无链接)。

## 输出格式

一个整数,表示最小距离和。

## 样例 #1

### 样例输入 #1

```
5                        
13 2 3
4 0 0
12 4 5
20 0 0
40 0 0
```

### 样例输出 #1

```
81
```

## 提示

#### 数据规模与约定

对于 $100\%$ 的数据,保证 $1 \leq n \leq 100$,$0 \leq u, v \leq n$,$1 \leq w \leq 10^5$。

出自洛谷:P1364 医院设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

格式有问题,看不懂就点链接.

用floyed我们很简单的就可以得出,各个点到其他所有的点的距离,再乘上其他点的人口,就可以得到,建立此点位置距离和,求出每个位置的距离和取最小的就是答案

ok上代码看看

#include<stdio.h>

int map[101][101];
int h[101];
int n;

void newr(){
  for(int h=1;h<=n;h++){
     for(int g=1;g<=n;g++)
        map[h][g]=1000000;
  }


}


void floyed(){

for(int j=1;j<=n;j++)
   for(int h=1;h<=n;h++)
   for(int gh=1;gh<=n;gh++){
    if(j!=gh&&j!=h&&h!=gh&&map[h][gh]>map[h][j]+map[j][gh]){
        map[h][gh]=map[h][j]+map[j][gh];
    }
   }
}



int main(){

scanf("%d",&n);
int jj,kk;
newr();
for(int j=1;j<=n;j++){
        map[j][j]=0;
    scanf("%d%d%d",&h[j],&jj,&kk);
       if(jj!=0)
       map[jj][j]=map[j][jj]=1;
       if(kk!=0)
       map[kk][j]=map[j][kk]=1;
}

floyed();
int min=999999999;
for(int kl=1;kl<=n;kl++){
    int sum=0;
    for(int y=1;y<=n;y++){

        sum+=map[kl][y]*h[y];
    }

        if(sum<min)
            min=sum;
}
printf("%d\n",min);


return 0;
}

简单的鸭皮,练习刚刚好的呀

再来

题目描述

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

  • 深度:44
  • 宽度:44
  • 结点 8 和 6 之间的距离:88
  • 结点 7 和 6 之间的距离:33

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #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≤�,�,�,�≤�≤1001≤u,v,x,y≤n≤100,且给出的是一棵树。

 直接复制还可以看见图,还是直接复制吧

好家伙数据量不大才100而已,我觉得floyed完全可以的

1深度 就是点1到其他的点距离的最大值

2宽度,每次遍历点1到其他点的时候距离就代表点的参数记录下来取点最多的层数就可以了

3x到y的距离,向根结点的边数乘以2,就是向根节点找的边就得乘以2,那我们就把子节点向上的边权变成2就好拉,用了floyed得到的就是答案了

ok上代码

#include<stdio.h>

int a[101][101];
int b[101]={0};
int n,x,y;

void newr(){


for(int f=1;f<=n;f++){
    for(int g=1;g<=n;g++){
     a[f][g]=100000;
    }
}
}


int main(){

int jj,kk;
scanf("%d",&n);
newr();

for(int h=1;h<n;h++){
    scanf("%d%d",&jj,&kk);
    a[jj][kk]=1;
    a[kk][jj]=2;
}

for(int h=1;h<=n;h++){//floyed
    for(int g=1;g<=n;g++){
        for(int b=1;b<=n;b++){
            if(h!=g&&g!=b&&b!=h&&a[g][b]>a[g][h]+a[h][b])
            a[g][b]=a[g][h]+a[h][b];

            }
        }
    }

scanf("%d%d",&x,&y);

int maxr=1,maxd=1;

for(int h=2;h<=n;h++){
    maxr=maxr>a[1][h]?maxr:a[1][h];
    b[a[1][h]]++;//记录第几层有几个节点

}
for(int h=1;h<=maxr;h++){//有多深就有几层
    maxd=maxd>b[h]?maxd:b[h];
}

printf("%d\n",maxr+1);
printf("%d\n",maxd);
printf("%d\n",a[x][y]);


return 0;
}

理解了,几个要求的值咋来的题目就很简单了,还是因为数据小了,可以偷偷的溜

不然不会折磨简单的呀 

ok ok

到这就算了

撒花谢幕!!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7年测试,从功能测试到测试开发,我总算证明了自己

我感觉我是一个比较有发言权的人吧&#xff0c;我在测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为测试开发工程师&#xff0c;工资也翻了几倍&#xff1b; 个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力&#xff1b;我刚出来的时候是在鹅厂…

FL Studio21中文版D编曲数字音乐工作软件

随着现在人们的生活水平不断提高&#xff0c;我们的精神生活也越来越丰富&#xff0c;对于现在的年轻人来说&#xff0c;DJ舞曲是一个较受欢迎的领域&#xff0c;有许多年轻人对DJ这个职业感兴趣&#xff0c;想要深入了解DJ编曲这份工作&#xff0c;那么今天我们就来说一说DJ编…

聊聊ChatGPT无法取代的7个工作

ChatGPT——全世界都在谈论的非常流行的人工智能工具。自从 2022 年 11 月 30 日推出以来&#xff0c;ChatGPT 就被证明是执行复杂任务并简化它们的一体式工具。无论是通过 UPenn 的沃顿商学院 MBA 考试&#xff0c;撰写常春藤盟校入学论文&#xff0c;还是完成简单的任务&…

Django自带的Admin后台中如何获取当前登录用户

需求背景 在使用Django快速开发一个IT 电脑、显示器资产管理小系统的时候&#xff0c;遇到一个问题是&#xff0c;当变更资产设备&#xff08;新增、修改、删除&#xff09;的时候&#xff0c;能记录是谁在什么时间进行的变更。 确认的是肯定是登录状态&#xff0c;但是在使用…

算法学习|动态规划 LeetCode 647. 回文子串、516.最长回文子序列

动态规划一、回文子串思路实现代码二、最长回文子序列思路实现代码&#xff08;希望自己能总结出做过的动态规划题&#xff01;要开始回顾之前刷过的题了&#xff09; 一、回文子串 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或…

回收站数据恢复的方法技巧

​最近有网友反映将一些不经常使用的文件放入回收站后忘记了&#xff0c;清空回收站后想要再次使用文件却怎么都还原不了&#xff0c;想利用回收站数据恢复软件经恢复&#xff0c;咨询有哪些回收站数据恢复软件推荐&#xff0c;下面就给大家推荐回收站数据恢复软件使用方法。 …

数据库开发重点存档

2023春数据库开发复习 T1 视图可以用的几个场景&#xff1f; 不同表字段聚合、信息重组&#xff1a;当某个查询涉及多表连接、次数频繁时&#xff0c;可以创建视图隐藏底层表的复杂性&#xff0c;简化查询。 控制权限&#xff1a;根据不同用户的权限&#xff0c;可以建立不同…

星巴克创始人第三次重出江湖

星巴克创始人第三次出山&#xff0c;与中国有关 中国咖啡连锁竞争白热化 星巴克诞生于1985年&#xff0c;爷爷级的公司 趣讲大白话&#xff1a;百年老店不容易 【趣讲信息科技135期】 **************************** 将心注入 星巴克创始人自传 创始人的激情、执行力、团队建设很…

HttpRunner3.x 源码解析(5)-runner.py

首先看下生成的pytest文件 from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCaseclass TestCaseLogin(HttpRunner):config (Config("登录成功").variables(**{"password": "tester", "expect_foo2": "co…

17_I.MX6ULL_内部RTC

目录 I.MX6U RTC简介 相关寄存器 实验源码 I.MX6U RTC简介 实时时钟是很常用的一个外设,通过实时时钟我们就可以知道年、月、日和时间等信息。因此在需要记录时间的场合就需要实时时钟,可以使用专用的实时时钟芯片来完成此功能,但是现在大多数的MCU或者MPU内部就已经自带了…

一、Locust快速 入门

1 . 介绍 Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。 您可以在常规 Python 代码中定义用户的行为&#xff0c;而不是被困在 UI 或限制性领域特定语言中。 这使得 Locust 可以无限扩展并且对开发人员非常友好。 用普通的旧 Python 编写测试场景 如果您希望…

【华为OD机试】1038 - 学英语

文章目录一、题目&#x1f538;题目描述&#x1f538;输入输出&#x1f538;样例1二、代码参考作者&#xff1a;KJ.JK&#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x…

基于价值认同的需求侧电能共享分布式交易策略(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

惊喜开箱!品牌可以从 Ledger 引领的顶级体验之一中学到什么?

Ledger 是加密货币硬件钱包的领先供应商&#xff0c;它通过进入 The Sandbox 并创建游戏化体验来扩大其教育计划&#xff0c;从而在虚拟世界中掀起波澜。通过在这个令人兴奋的新空间打造自己的品牌&#xff0c;Ledger 正在接触更广泛的受众&#xff0c;并以有趣的方式与人们互动…

回收站清空了怎么恢复?快来get实用方法!

案例&#xff1a;回收站清空了怎么恢复&#xff1f; 【真的栓Q了&#xff0c;我刚点击回收站&#xff0c;不知道按错了什么&#xff0c;回收站被清空了&#xff0c;大家有什么方法可以恢复回收站里的文件吗&#xff1f;请大家给我出出主意吧&#xff01;谢谢啦&#xff01;】 …

不愧是比亚迪!

最近这段时间&#xff0c;因为我自己准备买车嘛&#xff0c;然后先后去试驾了比亚迪汉、小鹏P7i、蔚来ET5、智己LS7这几辆车&#xff0c;接下来想分4篇文章依次给大家分享一下这四个品牌的车试驾体验。比亚迪汉小鹏P7i蔚来ET5这四个品牌总共花了三天时间&#xff0c;也算是比较…

STC89C52定时器的简介

一、序言 针对于STC89C52RC而言&#xff0c;这个芯片内部包含了三个定时器——T0、T1和T2&#xff0c;他们的中断优先级分别是1、3和5。 怎么还有一个定时器2呢&#xff1f;博主也是今天整理这篇博客的时候&#xff0c;翻阅芯片手册才发现的。如果说&#xff0c;我们经常用的…

00后面试华为软件测试工程师,竭尽全力拿到15K。。。。。

不废话&#xff0c;直接重点 一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在…

从C语言到C++(第一章_C++入门_中篇)缺省参数+函数重载+引用

目录 1.缺省参数 1.1缺省参数概念 1.2缺省参数的使用&#xff1a; 1.3缺省参数的分类 1.3.1 全缺省参数 1.3.2 半缺省参数 1.4缺省参数的应用场景 2. 函数重载 2.1函数重载的概念 2.2不支持函数重载的情况 3.引用 3.1引用的概念 3.2引用的特性 3.3引用做参数 3…

C++内存管理(new和delete)

目录 1. new/delete操作内置类型 2. new和delete操作自定义类型 3. operator new与operator delete函数 4 .new和delete的实现原理 1 .内置类型 2 .自定义类型 new的原理 delete的原理 new T[N]的原理 delete[]的原理 5. 定位new表达式(placement-new) 6. malloc/f…