蓝桥杯每日真题 - 第20天

题目:(机房)

题目描述(13届 C&C+G题)

 

解题思路:

这道题目可以看作在一个无向图中查找两点之间的最短路径。题目中的 n 台电脑和 n−1 根网线形成了一棵树,树是一个特殊的无向图,因此我们可以利用 广度优先搜索(BFS) 来求解最短路径问题。

  • 建图

    • 通过输入的 n−1 对电脑连接关系构建邻接表表示的无向图。

  • 最短路径搜索

    • 利用 BFS,从起点开始逐层扩展,找到终点时输出步数。

    • 由于树的性质,BFS的第一条找到的路径一定是最短路径。

  • 多个查询的处理

    • 每次查询直接用 BFS 求解从起点到终点的最短路径。

 

代码实现(C语言):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int road(int start,int end,int dex,int num,int bef,int n);
int map[10000][10000];
int dey[10000];
int main()
{    int n,m;scanf("%d",&n);scanf("%d",&m);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j){map[i][j]=1;}else{map[i][j]=0;}}dey[i]=-1;}for(int i=1;i<=n-1;i++){int a;int b;scanf("%d",&a);scanf("%d",&b);map[a][b]=1;map[b][a]=1;}int q[m+1][2];for(int i=1;i<=m;i++){scanf("%d",&q[i][0]);scanf("%d",&q[i][1]);}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){dey[i]=dey[i]+map[i][j];}}for(int i=1;i<=m;i++){printf("%d\n",road(q[i][0],q[i][1],q[i][0],0,-1,n));}return 0;
}int road(int start,int end,int dex,int num,int bef,int n)
{//printf("%d to %d have %d\n",bef,dex,num);if(dex==end){return num+dey[dex];}else{int new_num=num+dey[dex];int lin=-100;int e=0;for(int i=1;i<=n;i++){if(i!=dex && map[i][dex]==1 && i!=bef){lin=fmax(lin,road(start,end,i,new_num,dex,n));e=e+1;}}if(e==0){return -100;}else{return lin;}}
}

得到运行结果:

代码分析: 

  • 初始化部分

    • 通过输入节点数n和边数m,创建一个邻接矩阵来表示图,初始化每个节点的度数为-1。

    • 将图的边输入,并更新邻接矩阵。

  • 查询输入部分

    • 输入多个查询,每个查询要求计算从一个节点到另一个节点的路径代价。

  • 计算每个节点的度数

    • 遍历邻接矩阵,计算每个节点的度数,并将其存储在一个数组中。

  • 计算路径代价的递归函数

    • 使用深度优先搜索(DFS)递归遍历路径,如果当前节点是终点,则返回路径代价;否则,继续递归遍历与当前节点相邻的未访问节点。

    • 每到一个节点,路径代价会累加该节点的度数。

  • 输出查询结果

    • 对每个查询,调用递归函数计算路径代价,并输出结果。

难度分析

⭐️⭐️⭐️⭐️⭐️

总结

  • 图的表示:采用邻接矩阵和度数数组表示图。

  • 深度优先搜索(DFS):使用递归方法遍历路径并计算路径代价。

  • 路径代价计算:路径代价由路径上经过的所有节点的度数之和来确定。

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

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

相关文章

【Python系列】浅析 Python 中的字典更新与应用场景

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

node.js、nginx、iis、tomcat针对部署方面的简述

了解 Node.js、Nginx、IIS 和 Tomcat 这些技术的部署方式及其应用场景&#xff0c;可以帮助你做出更合理的架构选择。下面是这些技术的简要讲解及它们在部署中的应用&#xff1a; 1. Node.js 部署 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;广泛…

基于docker进行任意项目灵活发布

引言 不管是java还是python程序等&#xff0c;使用docker发布的优势有以下几点&#xff1a; 易于维护。直接docker命令进行管理&#xff0c;如docker stop、docker start等&#xff0c;快速方便无需各种进程查询关闭。环境隔离。项目代码任何依赖或设置都可以基本独立&#x…

【课堂笔记】隐私计算实训营第四期:“隐语”可信隐私计算开源框架

“隐语”可信隐私计算开源框架 隐语架构一览隐语架构拆解产品层算法层PSI/PIR数据分析&#xff08;Data Analysis&#xff09;联邦学习&#xff08;Federated Learning&#xff09; 计算层混合编译调度——RayFedSPUHEUTEEUYACL 资源层KUSCIA 互联互通跨域管控 隐语架构一览 隐…

Kubernetes的pod控制器

文章目录 一&#xff0c;什么是pod控制器二&#xff0c;pod控制器类型&#xff08;重点&#xff09;1.ReplicaSet2.Deployment3.DaemonSet4.StatefulSet5.Job6.Cronjob 三&#xff0c;pod与控制器的关系1.Deployment2.SatefulSet2.1StatefulSet组成2.2headless的由来2.3有状态服…

一文读懂埋阻埋容工艺

PCB 埋阻埋容工艺是一种在 PCB 板内部埋入电阻和电容的工艺。通常情况下&#xff0c; PCB 上电阻和电容都是通过贴片技术直接焊接在板面上的&#xff0c;而埋阻埋容工艺则将电 阻和电容嵌入到 PCB 板的内部层中&#xff0c;这种印制电路板,其自下而上依次包括第一介电 层,隐埋电…

QA|使用 MapleSim 模拟卷料生产 (Converting)和卷对卷系统 (R2R)

使用 MapleSim 模拟卷料生产 (Converting)和卷对卷系统 (R2R) 纸张、薄膜、塑料、金属箔、新能源电池和卷料生产设备 (converting equipment) 的制造商正在转向建模和仿真&#xff0c;以提升卷料处理的设备性能和产品质量。MapleSim 卷料处理库提供了专业的建模元件以及功能&a…

MATLAB读入不同类型图像并显示图像和相关信息

MATLAB&#xff08;Matrix Laboratory)是一种常用的数学工具软件&#xff0c;MATLAB以矩阵运算为核心&#xff0c;为图像处理提供了高效的数据处理能力。图像处理中的许多操作都可以转化为矩阵运算&#xff0c;从而利用MATLAB的矩阵运算能力进行优化和加速。在图像处理方面&…

学习日志015--python单链表

创建 class Node:def __init__(self,data):# 数据域self.data data# 链接域self.next Noneclass LinkList:def __init__(self,):# 初始化头节点self.head None# 记录链表的长度self.size 0 增加 #头插def insert_head(self,value):# 创建新节点node Node(value)q self…

使用vue-i18n为你的Vue应用添加多语言支持

前言 在如今的互联网世界中&#xff0c;产品的国际化&#xff08;Internationalization&#xff0c;简称 i18n&#xff09;变得越来越重要。国际化不仅仅是将文本翻译成多种语言&#xff0c;更是提升用户的全球体验。如果你正在使用 Vue.js 构建应用&#xff0c;那么你可以借助…

STM32串口——5个串口的使用方法

参考文档 STM32串口——5个串口的使用方法_51CTO博客_stm32串口通信的接收与发送 串口是我们常用的一个数据传输接口&#xff0c;STM32F103系列单片机共有5个串口&#xff0c;其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Receiver/Transmitter)…

javaScript交互案例

1、模态框(弹出框) &#xff08;1&#xff09;、需求&#xff1a; 点击弹出层&#xff0c;会弹出模态框&#xff0c;并且显示灰色半透明的遮挡层点击关闭按钮&#xff0c;可以关闭模态框&#xff0c;并且同时关闭半透明遮挡层鼠标放在模态框最上面一行&#xff0c;可以按住鼠…

python中的OS模块的基本使用

&#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&#x1f64f;&#x1f64f; 文章目录…

算法【最长递增子序列问题与扩展】

本文讲解最长递增子序列以及最长不下降子序列的最优解&#xff0c;以及一些扩展题目。本文中讲述的是最优解&#xff0c;时间复杂度是O(n*logn)&#xff0c;空间复杂度O(n)&#xff0c;好实现、理解难度不大。这个问题也可以用线段树来求解&#xff0c;时间和空间复杂度和本节讲…

SpringBoot提交参数去除前后空格

介绍 前台提交的请求参数&#xff0c;自动去除前后空格 配置代码 去除路径参数的前后空格 import org.springframework.beans.propertyeditors.StringTrimmerEditor; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.…

CnosDB 实时流式计算:优化时序数据处理与降采样解决方案

在处理时序数据时&#xff0c;数据写入周期通常与数据采集设备的频率相关&#xff0c;有时每秒钟就需要处理大量的数据点。长时间处理如此多的数据会导致存储问题。一个有效的解决方案是使用流式计算&#xff0c;将原始数据进行降采样。 流式计算在时序数据库中指对实时数据流…

241120学习日志——[CSDIY] [InternStudio] 大模型训练营 [09]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

初识arkts2

类 类声明引入一个新类型&#xff0c;并定义字段&#xff0c;方法和构造函数 属性 必须要给初始值 constructor():构造函数 定义类后&#xff0c;可以使用关键字new创建实例 export class PersonStudent{firstName:string//名lastName:string//姓//constructor():构造函数…

数字排列.

题目描述 小明负责公司年会&#xff0c;想出一个趣味游戏&#xff1a; 屏幕给出 1 ~ 9 中任意 4 个不重复的数字&#xff0c;大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第 N 位置的数字&#xff0c;其中 N 为给出数字中最大的&#xff08;如果不到这么多数字则…

机器学习基础06_梯度下降

目录 一、为什么使用梯度下降 二、什么是梯度下降 三、为什么要用梯度下降 四、怎么进行梯度下降 1、微分 1.单变量的微分 2.多变量的微分 2、梯度 3、步骤 (1)学习率α (2)梯度(导数)前的负号 4、实例实现 五、sklearn梯度下降 一、为什么使用梯度下降 前面利用正…