PTA L2-031 深入虎穴 dfs与bfs版

news2024/9/21 12:42:00

著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。

内线告诉他,情报就藏在迷宫的最深处。但是这个迷宫太大了,他需要你的帮助 —— 请编程帮他找出距离入口最远的那扇门。

输入格式:

输入首先在一行中给出正整数 N(<105),是门的数量。最后 N 行,第 i 行(1≤i≤N)按以下格式描述编号为 i 的那扇门背后能通向的门:

K D[1] D[2] ... D[K]

其中 K 是通道的数量,其后是每扇门的编号。

输出格式:

在一行中输出距离入口最远的那扇门的编号。题目保证这样的结果是唯一的。

输入样例:

13
3 2 3 4
2 5 6
1 7
1 8
1 9
0
2 11 10
1 13
0
0
1 12
0
0

输出样例:

12

做法:

1.建图(用邻接表存图)

2.搜索图

说一下:

dfs将 每个与1连通的点 到1的距离算出来了,所以还要 遍历一次 距离数组 才知道答案是谁

bfs队尾最后一个元素即是答案(题目保证结果是唯一的)。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 100010;

int h[N],e[2 * N],ne[2 * N],idx;
int dist[N],ans;
int q[N];
int n = 0;

void add(int a,int b)
{
    e[idx] = b,ne[idx] = h[a],h[a] = idx++;
}

void dfs(int u,int cnt)
{
    dist[u] = cnt;
    for(int i = h[u];i != -1;i = ne[i])
    {
        int j = e[i];
        if(!dist[j]) dfs(j,cnt + 1);
    }
}
int bfs(int u)
{
    int hh = 0,tt = -1;
    dist[u] = 1;
    q[++tt] = u;
    while(hh <= tt)
    {
        int t = q[hh++];
        for(int i = h[t];i != -1;i = ne[i])
        {
            int j = e[i];
            if(!dist[j])
            {
                dist[j] = dist[t] + 1;
                q[++tt] = j;
            }
        }
    }
    return q[tt];
}
int main()
{
    scanf("%d",&n);
    memset(h,-1,sizeof h);
    for(int i = 1;i <= n;i++)
    {
        int k = 0;
        scanf("%d",&k);
        while(k--)
        {
            int b = 0;
            scanf("%d",&b);
            add(i,b),add(b,i);
        }
    }
    // dfs(1,1);//dfs
    // for(int i = 1;i <= n;i++)
    //     if(dist[i] > dist[ans]) ans = i;
    // printf("%d\n",ans);
    
    printf("%d\n",bfs(1));//bfs
    return 0;
}

结果: 

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

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

相关文章

机器学习-05-回归算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中回归算法&#xff0c;包括线性回归&#xff0c;岭回归&#xff0c;逻辑回归等部分。 参考 fit_transform,fit,transform区别和作用详解&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…

结构体讲解

目录 一.结构体类型的声明 (1)结构体的声明 (2)结构体的创建和初始化 (3)匿名结构体 (4)结构体的自引用 二.结构体内存对齐 (1)对齐规则 (2)为什么存在内存对齐&#xff1f; (3)结构体传参 三.结构体实现位段 (1)什么是位段 (2)位段的内存分配 (3)位段的跨平…

GDAL中的地理坐标系、投影坐标系及其相互转换

目录 地理坐标系 国内常用地理坐标系 投影坐标系 国内常用投影坐标系&#xff08;不推荐使用&#xff09; 坐标转换 地理坐标转为投影坐标 投影坐标转为地理坐标 地理坐标系 原理参考这篇文章&#xff1a;地理坐标系与投影坐标系区别与联系 https://yunxingluoyun.blog.…

极智项目 | 基于YOLOv5+DeepSort实现的车流量统计算法

欢迎关注我的公众号「极智视界」&#xff0c;获取我的更多技术分享 大家好&#xff0c;我是极智视界&#xff0c;本文分享一下 基于YOLOv5DeepSort实现的车流量统计算法。 车流量统计的实现一般原理是跟踪画面上检测出来的车辆&#xff0c;并给每个框标上了序号&#xff0c;当…

轨迹预测后处理之非极大值抑制(NMS)

非极大值抑制是图像处理里面的一种算法&#xff08;比如边缘检测会使用到&#xff09; 轨迹预测这里借鉴了其思想&#xff0c;比如说对于某个场景中的某辆车&#xff0c;我们使用模型预测 64 条轨迹或者更多&#xff0c;以很好地捕获多模态性&#xff0c;同时每条轨迹对应一个…

JavaScript 基础、内置对象、BOM 和 DOM 常用英文单词总结

一提到编程、软件、代码。对于英语不是很熟悉的同学望而却步。其实没有想像中的难么难&#xff0c;反复练习加上自己的思考、总结&#xff0c;会形成肌肉记忆。整理一下&#xff0c;初学者每天30遍。 1、JavaScript 基础语法 break&#xff1a;中断循环或 switch 语句的执行。…

蔚来JAVA面试(收集)

先叠加&#xff0c;这个是自己找的答案不一定对&#xff0c;只是给我参考看看而已。 一、项目 这个没有&#xff0c;根据实际项目情况来。蔚来比较喜欢拷打项目&#xff0c;所以要对项目非常熟悉&#xff08;慌&#xff09; 二、JAVA基础 2.1 Java中的IO模型有用到过吗&#…

YOLOv9改进策略:卷积魔改 | SCConv:空间和通道重建卷积,即插即用,助力检测 | CVPR2023

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; CVPR2023 SCConv 由两个单元组成&#xff1a;空间重建单元&#xff08;SRU&#xff09;和通道重建单元&#xff08;CRU&#xff09;。 SRU利用分离重建方法来抑制空间冗余&#xff0c;而CRU使用分割-变换-融…

每秒批量插入10000条数据到MySQL中,资源消耗(带宽、IOPS)有多少?

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因代码资源情况改造 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、…

http和socks5代理哪个隐蔽性更强?

HTTP代理和SOCKS5代理各有其优缺点&#xff0c;但就隐蔽性而言&#xff0c;SOCKS5代理通常比HTTP代理更隐蔽。以下是它们的比较&#xff1a; HTTP代理&#xff1a; 透明性较高&#xff1a;HTTP代理在HTTP头中会透露原始客户端的IP地址&#xff0c;这使得它相对不太隐蔽。…

算法打卡day28|贪心算法篇02|Leetcode 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

算法题 Leetcode 122.买卖股票的最佳时机 II 题目链接:122.买卖股票的最佳时机 II 大佬视频讲解&#xff1a;买卖股票的最佳时机 II视频讲解 个人思路 因为只有一只股票&#xff0c;且两天作一个交易单元&#xff0c;那每次只收集正利润就可以最终最多可以获取的利润&#xf…

docker--Dockerfile (三)

1&#xff0c;Dcockerfile是什么 docker推荐使用dockerfile的定义文件和docker build命令来构建镜像。dockerfile使用基本的基于DSL&#xff08;面向领域语言&#xff09;语法的指令来构建Docker镜像。另一种创建Docker镜像的方式是使用docker commit&#xff0c;不推荐使用。 …

深入解析Mybatis-Plus框架:简化Java持久层开发(十三)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节介绍下Mybatis-Plus框架的逻辑删除功能。 &#x1f4d6; 正文 1 逻辑删除介绍 1.1 什么是逻辑删除&#xff1f; 首先我们先来了解下与逻辑删除对应…

手把手教集成环信新版UIKit组件,快速构建Android应用

前言 环信新版UIKit已重磅发布&#xff01;目前包含单群聊UIKit、聊天室ChatroomUIKit&#xff0c;本文详细讲解Android端单群聊UIKit的集成教程。 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库&#xff0c;提供各种组件实现会话列表、聊天界…

redis实战-黑马点评-短信登录

实现登录功能&#xff1a; 发送手机验证码&#xff1a; public Result sendCode(String phone, HttpSession session) {//获取手机号&#xff0c;校验手机号//如果不符合&#xff0c;返回错误信息if (!RegexUtils.isPhoneInvalid(phone)){//判断手机号是否有效return Result.fa…

MCGS学习——运行策略与脚本程序

语法讲解 运行策略&#xff1a;脚本的编程环境启动策略&#xff1a;在进入运行环境后首先运行的策略&#xff0c;只运行一次&#xff0c;一般完成系统初始化的处理循环策略&#xff1a;按照用户指定的周期时间&#xff0c;循环执行策略块内的内容&#xff0c;通常用来完成流程…

pytorch中tensor类型转换的几个函数

目录 IntTensor转FloatTensor FloatTensor转IntTensor Tensor类型变为python的常规类型 IntTensor转FloatTensor .float函数&#xff1a; FloatTensor转IntTensor .int函数 Tensor类型变为python的常规类型 item函数

业务问题:分析最近1周的用户行为转化

1.数据集 2.问题分析 数据部分截图样例&#xff1a; 其中&#xff0c;“行为类型”列中的值有4种&#xff0c;对应4种用户行为&#xff0c;分别是&#xff1a;用户对商品进行浏览、收藏、加购、购买行为。 业务场景&#xff1a; 地点是&#xff1a;公司淘宝店铺 时间范围是&a…

利泰大健康邀您莅临2024第七届燕窝及天然滋补品博览会

2024第七届世界燕窝及天然滋补品博览会 2024年8月7-9日| 上海新国际博览中心 同期举办&#xff1a;第三届世界滋补产业生态大会暨交流晚宴/颁奖典礼 2024第九届酵素、益生产品博览会 2024上海国际月子健康博览会 展会介绍 世界燕窝及天然滋补品展览会暨世界滋补产业生态发…

必备基础01-TypeScript

一、TypeScript W3C、菜鸟、b站都有教程 这里不多说&#xff0c;只是写一下基础&#xff0c;能看懂即可 内容来源于W3Cschool&#xff0c;本章整合只为以后更好查询 1.概述 TypeScript是用于应用程序规模开发的JavaScript。 TypeScript是强类型&#xff0c;面向对象的编译…