Acwing847 图中点的层次(bfs)

这道题用的是bfs,一开始用了dfs搜出了答案为4

题目

给定一个 n个点 m 条边的有向图,图中可能存在重边和自环。

所有边的长度都是 1,点的编号为 1∼n。

请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1。

输入格式

第一行包含两个整数 n 和 m。

接下来 m 行,每行包含两个整数 a 和 b,表示存在一条从 a 走到 b 的长度为 1 的边。

输出格式

输出一个整数,表示 1 号点到 n号点的最短距离。

数据范围

1≤n,m≤10

输入样例:
4 5
1 2
2 3
3 4
1 3
1 4
输出样例:
1

解析与代码

bfs的模版思路

  1. 使用队列保存待访问的节点。

  2. 初始化距离数组(d 数组)为 -1,表示节点未被访问。

  3. 将起始节点放入队列,并设置距离为 0。

  4. 队列非空时,循环执行以下步骤:

    • 弹出队首节点。
    • 遍历该节点的相邻节点。
    • 如果相邻节点未被访问,更新距离,并将相邻节点入队。
  5. 返回目标节点的距离。

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main {static int n, m, idx, N = 100010, ans = Integer.MAX_VALUE;static int[] e = new int[N * 2], h = new int[N * 2], ne = new int[N * 2], d = new int[N * 2];static boolean[] state = new boolean[N];// 添加边,建立邻接表public static void add(int a, int b) {e[idx] = b;ne[idx] = h[a];h[a] = idx ++;}public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();Arrays.fill(h, -1);// 构建图的邻接表for (int i = 0; i < m; i++) {int a = in.nextInt();int b = in.nextInt();add(a, b);}System.out.println(bfs());}public static int bfs() {Arrays.fill(d, -1);Queue<Integer> q = new LinkedList<>();d[1] = 0;q.offer(1);while (!q.isEmpty()) {int t = q.poll();// 遍历与当前节点 t 相邻的节点for (int i = h[t]; i != -1; i = ne[i]) {int j = e[i];if (d[j] != -1) continue; // 如果节点已经访问过,跳过d[j] = d[t] + 1; // 更新节点 j 的距离q.offer(j); // 将节点 j 入队}}return d[n]; // 返回目标节点 n 的距离}
}

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

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

相关文章

【教程】微信小程序如何拍摄图片及视频并上传到后台进行存储

需求分析 在微信小程序中需要使用手机拍摄照片以及视频上传到后台进行进一步的操作&#xff0c;需要解决以下两个问题&#xff1a; 微信小程序如何拍摄照片及视频如何将拍摄的照片及视频上传到后台进行存储 解决方案 前端开发&#xff1a;微信小程序原生 后端开发&#xf…

sentinel熔断与限流

文章目录 一、sentinel简介Sentinel 是什么&#xff1f;Sentinel安装 二、sentinel整合工程新建cloudalibaba-sentinel-service8401微服务引入依赖yml配置主启动类添加EnableDiscoveryClient业务类测试 三、sentinel流控规则基本介绍流控模式直接&#xff08;默认&#xff09;关…

Web前端-移动web开发_流式布局

文章目录 移动web开发流式布局1.0 移动端基础1.1浏览器现状1.2 手机屏幕的现状1.3常见移动端屏幕尺寸1.4移动端调试方法 2.0 视口2.1 布局视口 layout viewport2.2视觉视口 visual viewport2.3理想视口 ideal viewport&#xff08;苹果&#xff09;2.4meta标签 3.0 物理像素(手…

0x32 约数

0x32 约数 定义 若整数 n n n除以整数 d d d的余数为0&#xff0c;即 d d d能整除 n n n&#xff0c;则称 d d d是 n n n的约数&#xff0c; n n n是 d d d的倍数&#xff0c;记为 d ∣ n d|n d∣n。 算术基本定理的推论 在算术基本定理中&#xff0c;若正整数 N N N被唯一…

c 小熊猫 c++ IDE编译ffmpeg 设置

菜单-》运行-》编译器选项-》链接时加入下列选项 &#xff1a; -I /usr/local/ffmpeg/include -L /usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lm 本机ffmpeg存储位置&#xff1a;include &#xff1a;/usr/local/ff…

十三、QPalette的简单使用(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在实际应用中&#xff0c;经常需要改变某个控件的颜色外观&#xff0c;如背景、文字颜色等。Qt提供的调色板类 QPalette 专门用于管理对话框的外观显示。QPalette 类相当于对话框或是控件的调色板&…

metartc5_jz源码阅读-yang_rtcpush_on_rtcp_ps_feedback

// (Payload-specific FB messages&#xff0c;有效载荷反馈信息)&#xff0c;这个函数处理Payload重传 int32_t yang_rtcpush_on_rtcp_ps_feedback(YangRtcContext *context,YangRtcPushStream *pub, YangRtcpCommon *rtcp) {if (context NULL || pub NULL)return ERROR_RTC…

记录:排查create_ap偶发无法开启自发AP的问题

背景说明&#xff1a; 系统&#xff1a;Xubuntu16.04&#xff1b;内核&#xff1a;4.14&#xff1b;无线网卡&#xff1a;EDIMAX EW-7822UAC 关于无线网卡的驱动安装和create_ap配置参考博文&#xff1a;Xubuntu16.04系统中使用EDIMAX EW-7822UAC无线网卡开启5G自发AP 目录 问题…

分布式系统的三字真经CAP

文章目录 前言C&#xff08;Consistency 数据一致性&#xff09;A&#xff08;Availability 服务可用性&#xff09;P&#xff08;Partition Tolerance 分区容错性&#xff09;CAP理论最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我一起探索一下分布式系统的三字真经C…

大数据调度框架Oozie,这个学习网站让你事半功倍!

Oozie是一个基于工作流引擎的开源框架&#xff0c;由Cloudera公司贡献给Apache。它主要用于管理和调度Apache Hadoop作业&#xff0c;支持的任务类型包括Hadoop MapReduce、Pig Jobs等。 Oozie的核心概念包括workflow jobs和coordinator jobs。Workflow jobs是由多个动作&#…

解决ssh: connect to host github.com port 22: Connection refused

ssh: connect to host github.com port 22: Connection refused 是连接github.com的端口号22拒绝连接。 可以使用github的443端口。 解决方案 在~/.ssh/config中添加如下字段&#xff1a; $ vim ~/.ssh/config # 如果没有config 文件就新建一个 Host github.comHostname ss…

Jmeter 性能-监控服务器

Jmeter监控Linux需要三个文件 JMeterPlugins-Extras.jar (包&#xff1a;JMeterPlugins-Extras-1.4.0.zip) JMeterPlugins-Standard.jar (包&#xff1a;JMeterPlugins-Standard-1.4.0.zip) ServerAgent-2.2.3.zip 1、Jemter 安装插件 在插件管理中心的搜索Servers Perform…

xtu-c语言考试复习-2

1223 确实写不出&#xff0c;数据远超过64位&#xff0c;难道用数组存吗&#xff0c;但是不好计算&#xff0c;想到的思路是取模&#xff0c;一边计算&#xff0c;一边取模&#xff0c;就不会超过数据范围&#xff0c;但是数学原理没懂&#xff0c;所以做不出来 看了下自己以…

AIGC视频生成:Pika1.0快速入门详解

Pika1.0快速入门详解 一、简介二、登录三、参数设置1、改变画面大小&#xff08;Aspect ratio&#xff09;2、改变帧数大小&#xff08;Frames per second&#xff09;3、镜头平移&#xff08;Camera control&#xff09;4、画面运动控制&#xff08;Strength of motion&#x…

VCG 网格面片法向量平滑

文章目录 一、简介二、实现代码三、实现效果一、简介 思路其实很简单,即是将当前面的法线替换为该面相邻面的法线的平均值,当前邻近法线需要根据邻近面片的面积进行加权。虽然思路很简单,但是很有效,这对一些重建算法效果也有所提升。 二、实现代码 //VCG #include <vc…

永不停止,永远在路上!MIAOYUN 2023年度回顾

2023 MIAOYUN年度关键词&#xff1a;坚持/沉淀/成长 2023年&#xff0c;我们身处虚浮遥荡的世界&#xff1a;支原体肺炎、流感接二连三、经济下行成热词、人人思危&#xff1b;更有暴雨成灾&#xff0c;核污水扩散&#xff0c;战火与地震不断。 坏事发生时&#xff0c;你有三种…

【NLP】多标签分类【上】

简介 《【NLP】多标签分类》主要介绍利用三种机器学习方法和一种序列生成方法来解决多标签分类问题&#xff08;包含实验与对应代码&#xff09;。共分为上下两篇&#xff0c;上篇聚焦三种机器学习方法&#xff0c;分别是&#xff1a;Binary Relevance (BR)、Classifier Chain…

绝地求生:【PC】第27赛季第2轮更新公告

各位玩家大家好&#xff01;欢迎收看本期闲游盒更新公告。 正式服维护时间 ※ 下列时间可能会根据维护情况而发生变化。 1月10日上午8:00 – 下午4:30 地图轮换 ※ 地图轮换将于每周三上午10点进行。 ※ 在随机选择地图的地区中&#xff0c;第1周可选择荣都地图&#xff0c…

Intellij-idea 如何编译maven工程*

在 Intellij IDEA 中编译 Maven 工程的步骤如下&#xff1a; 打开你的 Maven 工程。如果工程已经在 IDEA 中打开&#xff0c;那么你可以直接进行下一步。如果没有&#xff0c;你可以通过File -> Open 在弹出的对话框中选择你的 Maven 工程路径进行打开。 打开 Maven 项目窗…

Java SE入门及基础(11)

程序调试 1. 什么是程序调试 当程序出现问题时&#xff0c;我们希望程序能够暂停下来&#xff0c;然后通过我们操作使代码逐行执行&#xff0c;观察整个过程中变量的变化是否按照我们设计程序的思维变化&#xff0c;从而找问题并解决问题&#xff0c;这个过程称之为程序调试…