【数据结构】A : A DS图_传递信息

A : A DS图_传递信息

Description

小明在和他的小伙伴们玩传消息游戏,游戏规则如下:

  1. 有n名玩家,所有玩家编号分别为0~n-1,其中小明编号为0;
  2. 每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传消息的关系是单向的(即,有向边)。
  3. 每轮信息必须传递给另一个人,且信息可重复经过同一个人。

给定总玩家数n,以及按[玩家编号,对应可传递玩家编号]关系组成的二维数组relation。输出信息从小明(编号0)经过k轮传递到编号为n-1的小伙伴处的方案数;若不能到达,则输出0。

例如,对于n = 5, len = 7, relation = [[0,2],[2,1],[3,4],[2,3],[1,4],[2,0],[0,4]], k = 3,信息从编号0处开始,经3轮传递,到达编号4,共有3种方案:分别是0->2->0->4,0->2->1->4,0->2->3->4。

Input

第一行输入t,表示有t个测试样例。

接着,首先输入n,表示有n名玩家,接着输入len,表示接下来要输入的二维数组的长度,接着依次输入relation数组,接着输入k。

以此类推,共输入t个测试样例。

Output

每一行输出当前测试样例的方案数量。

以此类推共输出t行。

Sample

Input

35
7
0 2
2 1
3 4
2 3
1 4
2 0
0 4
33
2
0 2
2 1
24
6
0 1
0 2
0 3
1 2
1 3
2 3
3

Output

3
0
1

解题思路:

void DFS(int** data, int now, int x)用于深度优先搜索所有可能的信息传递路径。

  • int now: 当前玩家的编号。
  • int x: 剩余的传递轮数。
  • 在递归的每一步,函数都会检查是否到达了目的地(编号为n-1的玩家)且剩余轮数为0。如果是,就增加一种方案。
  • 接着,函数会遍历所有可能的下一个接收者,并对每个可能的接收者递归地调用自身。
  • 需要注意的是,这道题不需要定义一个数组visited来记录是否已经来过。

AC代码

#include<iostream>
using namespace std;
// SZTU forever
// 咋改代码?变局部全局,拆类建类,while和for变换
int totalPlayers;
int totalWays;
int numTests;
int relationCount;
int rounds;void DFS(int** messagePaths, int currentPlayer, int remainingRounds) {if (currentPlayer == totalPlayers - 1 && remainingRounds == 0) {totalWays++;return;}for (int i = 0; i < totalPlayers; i++){if (messagePaths[currentPlayer][i] == 1 && remainingRounds > 0){DFS(messagePaths, i, remainingRounds - 1);}}return;
}int main() 
{cin >> numTests;while (numTests--) {totalWays = 0;cin >> totalPlayers;int** messagePaths = new int* [totalPlayers];for (int i = 0; i < totalPlayers; i++)messagePaths[i] = new int[totalPlayers]();cin >> relationCount;while (relationCount--) {int sender, receiver;cin >> sender >> receiver;messagePaths[sender][receiver] = 1;}cin >> rounds;DFS(messagePaths, 0, rounds);cout << totalWays << endl;for (int i = 0; i < totalPlayers; i++)delete[] messagePaths[i];delete[] messagePaths;}return 0;
}

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

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

相关文章

busybox制作根文件系统2

上篇内容使用busybox制作好了根文件系统&#xff0c;接下来需要进行一些测试和功能的完善&#xff01; 根文件系统的测试 测试根文件系统的时候不是直接烧写到EMMC里面&#xff0c;这样测试效率太低了&#xff0c;Ubuntu的rootfs目录已经保存了根文件系统&#xff0c;只需要在…

向量数据库,展望AGI时代

无论是向量数据库&#xff0c;还是大模型&#xff0c;归根结底&#xff0c;大家在追捧它时的心态&#xff0c;焦虑大于需求。 向量数据库的热潮&#xff0c;在一定程度上“外化”了人们的焦虑。 但这并不能否定向量数据库的实际价值&#xff0c;甚至更长远来看&#xff0c;向…

【C++】linux下的gdb程序调试

目录 【C】Linux 下的 GDB 程序调试1. 安装 GDB2. 编译程序3. 启动 GDB4. 设置断点5. 执行程序6. 调试命令7. 调试崩溃8. 结束调试 【C】Linux 下的 GDB 程序调试 在开发 C 程序时&#xff0c;出现 bug 是常见的。调试是找出程序错误的关键步骤之一。在 Linux 环境下&#xff…

RedisTemplate使用详解

RedisTemplate介绍StringRedisTemplate介绍RedisConnectionFactory介绍RedisConnectionFactory源码解析 RedisOperations介绍RedisOperations源码解析 RedisTemplate使用连接池配置RedisTemplate连接池连接池配置 RedisTemplate应用场景RedisTemplate主要特点RedisTemplate使用…

redis运维(十六) 有序集合

一 有序集合 把握一点&#xff1a; 各种redis 命令都提供各种语言对应的API 接口,后续API是关键 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合类型的一部分&#xff0c;所以它保留了集合中元素不能重复的特性3、但是不同的是,有序集合给每个元素多设置…

什么是数字孪生?

数字孪生是指通过数字化技术手段&#xff0c;将现实世界中的实体物理系统或过程与其数字化模型相连接&#xff0c;实现实体物理系统或过程的虚拟仿真、监测、预测和优化等功能的一种技术。数字孪生技术可以将物理系统的运行状态、性能参数、故障信息等实时反馈到数字模型中&…

转型做视频了,博客就是稿子,继续坚持写博客,同时发布视频,能写博客说明思路清晰了,能再讲明白,理解就更透彻了,紧跟上时代发展。

1&#xff0c;今天特别记录下&#xff0c;B站给开通了《合集》功能 最近使用视频制作了几个视频。播放量还不错&#xff0c;最好的已经到了 2.6K了。 然后粉丝也涨到了 200个。 添加链接描述 紧跟时代&#xff1a;从写博客到录视频&#xff0c;粉丝大涨&#xff0c;突破200个&…

vue开发一、在Vue中引入ElementUI二、在Vue中使用阿里图标库

目录 一、在Vue中引入ElementUI1. 安装ElementUI2. 引入ElementUI3. 使用ElementUI组件 二、在Vue中使用阿里图标库1. 在阿里图标库中选择图标2. 下载图标3. 引入图标4. 使用图标 总结 一、在Vue中引入ElementUI ElementUI是一种基于Vue的第三方UI库&#xff0c;提供了许多常用…

接口自动化测试 —— 工具、请求与响应

一、工具&#xff1a; 1.工具介绍 postman &#xff1a;很主流的API测试工具&#xff0c;也是工作里面使用最广泛的研发工具。 JMeter&#xff1a; ApiPost&#xff1a; 2.安装postman&#xff1a; 安装好直接打开&#xff0c;不用注册。 二、通信模式&#xff1a; 1、…

【Java 进阶篇】从Java对象到JSON:Jackson的魔法之旅

在现代的软件开发中&#xff0c;处理数据的能力是至关重要的。而当我们谈及数据格式时&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;通常是首选。为了在Java中轻松地将对象转换为JSON&#xff0c;我们需要一种强大而灵活的工具。这时&#xff0c;Jackso…

【Java 进阶篇】Redis:打开缓存之门

介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的键值对存储系统&#xff0c;被广泛用作缓存、消息中间件和数据库。它以其快速的读写能力、支持多种数据结构和丰富的功能而闻名。在这篇博客中&#xff0c;我们将深入了解Redis的概念、安装以及基本…

MQTT协议消息代理服务远程连接

目录 1. Linux 搭建 Mosquitto 2. Linux 安装Cpolar 3. 创建MQTT服务公网连接地址 4. 客户端远程连接MQTT服务 5. 代码调用MQTT服务 6. 固定连接TCP公网地址 7. 固定地址连接测试 Mosquitto是一个开源的消息代理&#xff0c;它实现了MQTT协议版本3.1和3.1.1。它可以在不…

第二十章:多线程

进程 线程的特点 1.进程是资源分配的最小单位&#xff0c;线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 package twentyth; public class ThreadTest extends Thread { public void run() { for (int i 1; i < 10; i) {//继承重…

Unity开发之C#基础-File文件读取

前言 今天我们将要讲解到c#中 对于文件的读写是怎样的 那么没接触过特别系统编程小伙伴们应该会有一个疑问 这跟文件有什么关系呢&#xff1f; 我们这样来理解 首先 大家对电脑或多或少都应该有不少的了解吧 那么我们这些软件 都是通过变成一个一个文件保存在电脑中 我们才可以…

【2023C卷最新题目】20天拿下华为OD笔试之【贪心】2023C-找座位/2023B-座位调整-全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入输出说明示例一输入输出 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 相同问题不同描述2023C-找座位题目描述输入描述输出描述示例一输入输出 示例二输入输出 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描…

Spring Boot创建和使用(重要)

Spring的诞生是为了简化Java程序开发的&#xff01; Spring Boot的诞生是为了简化Spring程序开发的&#xff01; Spring Boot就是Spring框架的脚手架&#xff0c;为了快速开发Spring框架而诞生的&#xff01;&#xff01; Spring Boot的优点&#xff1a; 快速集成框架&#x…

2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲…

MySQL 事务的底层原理和 MVCC(一)

在事务的实现机制上&#xff0c;MySQL 采用的是 WAL&#xff08;Write-ahead logging&#xff0c;预写式日志&#xff09;机制来实现的。 在使用 WAL 的系统中&#xff0c;所有的修改都先被写入到日志中&#xff0c;然后再被应用到系统中。通常包含 redo 和 undo 两部分信息。 …

【Java开发】 Springboot集成Mybatis-Flex

1 Mybatis-Flex 介绍 1.1简介 Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时&#xff…

cocos2dx ​​Animate3D(二)

Twirl 扭曲旋转特效 // 持续时间(时间过后不会回到原来的样子) // 整个屏幕被分成几行几列 // 扭曲中心位置 // 扭曲的数量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…