图论(BFS)构造邻接表(运用队列实现搜索)

码蹄集OJ-夏日漫步

#include<bits/stdc++.h> 
using namespace std;
int n;
int  a[200010],dis[200010],qaq[1000010];
vector<int>son[200010];
int que[200010];
int main( )
{memset(qaq,-1,sizeof(qaq));memset(dis,-1,sizeof(dis));cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=n;i>0;i--){if(qaq[a[i]]!=-1){son[i].push_back(qaq[a[i]]);}qaq[a[i]]=i;}for(int i=1;i<n;i++){son[i].push_back(i+1);son[i+1].push_back(i);   }int tail=2;que[1]=1;dis[1]=0;for(int i=1;i<=n;i++){int cur=que[i];for(auto v:son[cur]){if(dis[v]==-1){dis[v]=dis[cur]+1;que[tail]=v;tail++;}}}cout<<dis[n]<<endl;return 0;
}

题目表示从头开始每一个节点可以依次相连,构成一个无向图,而且跟据每一个节点的权值可以完善这个图,将权值相同的节点相连,这样题目就抽象成了图论。

由于节点少边多,所以想到运用邻接表进行BFS搜索。

构造邻接表:

    for(int i=n;i>0;i--){if(qaq[a[i]]!=-1){son[i].push_back(qaq[a[i]]);}qaq[a[i]]=i;}for(int i=1;i<n;i++){son[i].push_back(i+1);son[i+1].push_back(i);   }

qaq数组存储权值的节点值,初始化时通过memset函数将数组初始化成-1,从后向前遍历数组,如果qaq被赋值,说明在这个节点后有节点的权值与这个节点相同,将这个节点的孩子节点赋值为上一个节点值。(这种遍历方式实现了题目中人只能向后走,而且只能走到与到此节点下一个权值相同的节点)。接着将1到n个节点依次相连就行了,邻接表就构造好了。

BFS搜索过程,寻找最优路径。

    int tail=2;que[1]=1;dis[1]=0;  for(int i=1;i<=n;i++){int cur=que[i];for(auto v:son[cur]){if(dis[v]==-1){dis[v]=dis[cur]+1;que[tail]=v;tail++;}}}

令队列中存入的第一个根节点是1,从头开始遍历队列中每一个节点,队列中依次存入的是根节点的子节点。dis[i]存储的是节点i到节点1的距离,所以最后输出的是dis[n]。开始时,将dis数组初始化成-1,令dis[1]为0。在遍历队列中节点时,由于v是cur的孩子节点,所以dis[v]的值要在dia[cur]的基础下加1。为了寻找最优路径,要处理一种情况,在当前节点的孩子节点也是当前节点的根节点的孩子节点时,不对这个子节点进行路径更改,也不将子节点入队。也就是避免重复入队保证第一次到达某个节点时的路径就是最短路径

BFS 的核心特性就是:

第一次访问到某个节点时的路径长度,就是最短路径长度。

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

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

相关文章

vue怎么实现导入excel表功能

<el-uploadref"upload":action"aaa":on-change"importProject"name"excelFile"multiple:auto-upload"false":show-file-list"false"><el-button type"warning">导入</el-button><…

Linux DNS解析3 -- DNS解析代理配置使用

当网关设备配置了 /etc/hosts 文件时&#xff0c;确实可以为终端设备提供自定义DNS解析功能&#xff0c;但具体效果取决于网关的DNS代理服务配置。下面详细解释其工作原理和限制&#xff1a; 一、/etc/hosts 文件的作用 /etc/hosts 是本地静态域名解析文件&#xff0c;格式为&a…

历史版本的vscode下载地址

我有点厌恶vscode越来越臃肿的体积&#xff0c;也不需要层出不穷的新功能&#xff0c;于是网上找寻历史版本。 首先是这个页面&#xff1a;https://code.visualstudio.com/updates &#xff0c;但最多只显示两年&#xff0c;更早的就要手工修改地址栏&#xff0c;我试了最早的…

如何规范化项目执行

要实现项目执行的规范化&#xff0c;应做到以下几点&#xff1a;制定详细的项目执行计划、明确项目团队角色职责、建立高效沟通与协调机制、实施全面的质量与风险管理、采用合适的项目管理工具。其中&#xff0c;尤其重要的是明确项目团队角色职责&#xff0c;通过构建清晰的责…

【Rust异步】async和await异步编程实战:高并发任务处理全解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

在Linux上使用DuckCP实现从csv文件汇总数据到SQLite数据库的表

从pypi网站Duckcp页面下载duckcp-0.1.1-py3-none-any.whl 一开始用的Python 3.11.2环境。 继续沿用上文打补丁的方法&#xff0c;得到一个支持python3.11.1的安装包。 因为缺少zip压缩工具&#xff0c;使用python程序来完成对修改后文件的重新压缩。 import os import zipfile…

基于深度学习的图像分类:使用EfficientNet实现高效分类

前言 图像分类是计算机视觉领域中的一个基础任务&#xff0c;其目标是将输入的图像分配到预定义的类别中。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;在图像分类任务中取得了显著的进展。EfficientNet是一种新型的…

Java基础-综合案例

1、设计一个可以执行基本数学运算&#xff08;加减乘除&#xff09;的计算器程序功能描述&#xff1a;用户输入两个数字、一个运算符&#xff08;、-、*、/&#xff09;。根据所选运算符执行相应的数学运算&#xff0c;显示运算结果。import java.util.Scanner;public class Te…

四、计算机组成原理——第3章:存储系统

目录 3.1存储器概述 3.1.1存储器的分类 1.按在计算机中的作用(层次)分类 2.按存储介质分类 3.按存取方式分类 4.按信息的可保存性分类 3.1.2存储器的性能指标 3.2主存储器 3.2.1SRAM芯片和DRAM芯片 1.SRAM的工作原理 2.DRAM的工作原理 3.SRAM和DRAM的比较 4.存储器芯片的内部结…

3D Semantic Occupancy Prediction

3D 语义占用预测&#xff08;3D Semantic Occupancy Prediction&#xff09;旨在将真实世界环境划分为规则的三维体素&#xff08;voxel&#xff09;网格&#xff0c;并对每个体素同时预测&#xff1a; 占用状态&#xff08;Occupancy&#xff09;&#xff1a;该体素是否被物体…

在Word和WPS文字中添加的拼音放到文字右边

在Word和WPS文字中&#xff0c;可以方便地为中文汉字添加拼音。默认的是拼音在汉字的上方&#xff0c;而且不方便直接编辑。可以简单操作后把拼音放在汉字的右边&#xff0c;并且可以方便地编辑。一、Word&#xff1a;先为汉字添加拼音&#xff0c;然后选择性粘贴为纯文本即可1…

Torchv Unstrustured 文档解析库

一个强大且开发者友好的文档解析库&#xff0c;专为RAG&#xff08;检索增强生成&#xff09;应用优化。基于Apache Tika、Apache POI和PDFBox等业界标准Java库构建&#xff0c;TorchV Unstructured提供了增强的解析能力&#xff0c;具备智能表格结构识别和内容提取功能。 &am…

30天入门Python(基础篇)——第22天:面向对象之继承与多继承

目录 专栏导读 学习目标 1. 继承的基本概念 1.1 继承的优势 2. 单继承 2.1 基本语法 2.2 实际示例 3. super()函数详解 3.1 基本用法 3.2 super()的高级用法 4. 多继承 4.1 多继承语法 4.2 多继承示例 5. 方法解析顺序(MRO) 5.1 查看MRO 5.2 复杂的MRO示例 6. 实际应用案例 6…

学习人工智能所需知识体系及路径详解

一、核心基础知识体系1. 数学基础线性代数关键概念&#xff1a;向量空间、矩阵运算&#xff08;转置/逆矩阵&#xff09;、特征值分解、奇异值分解&#xff08;SVD&#xff09;应用场景&#xff1a;数据降维&#xff08;PCA&#xff09;、图像处理&#xff08;矩阵变换&#xf…

前端实现银河粒子流动特效的技术原理与实践

文章目录 1,引言 2,特效效果简介 3,技术原理解析 1. 粒子系统基础 2. 银河结构的数学建模 3. 动态流动与旋转 4,实现流程图 5,关键代码实现与详细讲解 1. 初始化Three.js场景 2. 生成银河粒子数据 3. 创建粒子几何体与材质 4. 实现粒子的动态旋转与动画 5. 可选:粒子颜色…

Qt_Gif_Creator 基于Qt的屏幕gif录制工具

本文介绍了一个基于Qt框架的屏幕GIF录制工具的实现。该工具包含XYGifCreator类负责GIF创建逻辑&#xff0c;使用Gif.h库进行GIF编码&#xff1b;XYGifFrame类提供GUI界面&#xff0c;支持设置录制区域大小、帧率以及保存位置。工具采用多线程处理GIF编码&#xff0c;支持Window…

Linux实战:HAProxy全方位指南

一、负载均衡核心概念 1.1 负载均衡定义 负载均衡&#xff08;Load Balance&#xff0c;简称LB&#xff09;是一种基于硬件设备或软件服务的高可用反向代理技术。它将特定业务&#xff08;如Web服务、网络流量&#xff09;分发到后端的一个或多个服务器/设备&#xff0c;从而提…

22 BTLO 蓝队靶场 Countdown 解题记录

Tools: - ELK - CyberChef - OSINT (whole World Wide Web) Hunt #1: Brute Force DetectedSource: winevent-security (1/3) — 可疑暴力破解流量来自哪个IP地址 What is the IP address from which the suspicious brute force traffic is seen?? 我们需要寻找暴力破解…

文心一言4.5开源模型实战:ERNIE-4.5-0.3B轻量化部署与效能突破

文心一言4.5开源模型实战&#xff1a;ERNIE-4.5-0.3B轻量化部署与效能突破 文心一言4.5开源模型实战&#xff1a;ERNIE-4.5-0.3B轻量化部署与效能突破&#xff0c;本文介绍百度文心一言 4.5 开源模型中 ERNIE-4.5-0.3B 的轻量化部署与效能。该 3 亿参数模型破解大模型落地的算力…

SAP-MM-采购订单批量创建 excel 版

采购订单批量创建程序摘要:不含任何定制字段的导入,直接导入系统即可使用 该SAP ABAP程序实现采购订单的批量创建功能,主要特性包括: 支持通过Excel文件批量导入采购订单数据(XLS/XLSX格式) 提供数据校验功能,包括: 物料号有效性检查 采购凭证存在性验证 科目分配类别…