当前位置: 首页 > news >正文

捉迷藏(BFS)

题目描述

Anna正在和一群朋友在玩捉迷藏游戏。这种游戏由若干人一起玩,其中一个人为“鬼”,其他人藏在N个房间,由鬼来找这些人。Anna想计算出N(2 <= N <= 20,000)个房间(编号为1……N)中她应该藏哪一间?

Anna知道“鬼”会从房间1开始找。所有房间被M条双向路连接M (1<= M <= 50,000),这种双向路以(A_i,B_i)表示,其中1<=A_i<=N;1<=B_i<=N; A_i!=B_i。通过这些双向路,任意两个房间之间都可以到达。

Anna觉得离房间1最远的那个房间最安全(相邻两个房间之间的距离为1),请你帮Anna编写一个程序找出她应该躲在哪个房间。

输入

第一行为N和M;第2行至第M+1行,分别包含一条路(A_i,B_i)。

输出

仅有一行,包含三个整数I、J、K,分别表示Anna应该躲的房间号(如果有多解,输出编号最小的)、房间1到Anna躲的房间的距离、Anna可以躲的房间数目。

样例输入
6 7
3 6
4 3
3 2
1 3
1 2
2 4
5 2
样例输出
4 2 3
提示

房间4,5,6 均离起点的距离为2,我们选择4号房间。

1.读入输入:读取房间数n和路径数m,然后读入m条路径,每条路径连接两个房间。

2.构建图:使用邻接表表示图(无向图),每个房间的邻居列表存储在vector<vector<int>>中。

3.BFS计算最短距离

初始化距离数组dist,大小为n+1(1-based indexing),初始值设为-1表示未访问。

从房间1开始BFS:设置dist[1]=0,将房间1加入队列。

遍历队列:对于每个出队房间u,访问其所有邻居v;如果v未访问(dist[v]==-1),则设置dist[v]=dist[u]+1,并将v加入队列。

4.分析距离数组

遍历所有房间(1到N),找到最大距离max_dist。

同时统计具有max_dist的房间数量count,并记录其中房间编号最小的min_room。

5.输出结果:输出min_room(Anna应藏的房间)、max_dist(距离)和count(房间数量)。

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,u,v;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>m;vector<vector<int>>graph(n+1);for(int i=0;i<m;i++){cin>>u>>v;graph[u].push_back(v);graph[v].push_back(u);}vector<int>dist(n+1,-1);dist[1]=0;queue<int>q;q.push(1);while(!q.empty()){u=q.front();q.pop();for(int v:graph[u]){if(dist[v]==-1){dist[v]=1+dist[u];q.push(v);}}}int min_room=-1,max_dist=-1,count=0;for(int i=1;i<=n;i++){if(dist[i]>max_dist){max_dist=dist[i];min_room=i;count=1;}else if(dist[i]==max_dist){count++;}}cout<<min_room<<" "<<max_dist<<" "<<count;return 0;
}
http://www.dtcms.com/a/331956.html

相关文章:

  • NY219NY220美光固态闪存NY224NY229
  • 数据结构---链式结构二叉树
  • PostgreSQL——触发器
  • 【慕伏白】CTFHub 技能树学习笔记 -- 基础知识 签到
  • leetcode-python-344反转字符串
  • Wireshark 与 Fiddler 的对比与适用场景
  • 宋红康 JVM 笔记 Day01|JVM介绍
  • Flink on YARN启动全流程深度解析
  • AI生成视频大纲(AI生成视频摘要功能)
  • python中的map函数
  • 记录LiveData使用及原理
  • Unity宝箱随机事件实现指南
  • AI三国杀:马斯克炮轰苹果“偏袒”OpenAI,Grok与ChatGPT的应用商店战争揭秘
  • 【昇腾】VirtualBox虚拟机下搭建Ubuntu 22.04环境给TF卡制卡报读写IO错误的问题处理_20250814
  • 【CF】Day127——杂题 (数论 gcd | 数论 gcd | 博弈论 | 二分图判断 | 贪心 + 暴力 / 二分答案 | 数论 gcd + 动态规划)
  • linux 主机驱动(SPI)与外设驱动分离的设计思想
  • 把大模型当“温度计”——基于 LLM 的分布式系统异常根因定位实战
  • 企业可商用的conda:「Miniforge」+「conda-forge」
  • Data Augmentation数据增强
  • 快速部署一个鉴黄服务
  • Android 项目:画图白板APP开发(二)——历史点、数学方式推导点
  • SQL详细语法教程(三)mysql的函数知识
  • 区块链 + 域名Web3时代域名投资的新风口(上)
  • Gemma 3 多模态推理 通过vllm运行Gemma-3-27B-IT模型的推理服务
  • 【系统安装】虚拟机中安装win10IOT企业版系统记录
  • 解决安装 scikit-learn==1.3.1 时出现的版本匹配错误
  • PHP 开发全解析:从基础到实战的进阶之路
  • sFlow原理与配置
  • Java面试场景题大全精简版
  • MySql——聚簇索引(主键索引)和非聚簇索索引(非主键索引)引区别(即聚集索引和非聚集索引区别)