玩家传递信息

2023-10-31

小 A 和 ta 的小伙伴们玩传信息游戏,游戏规则如下:
有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0
每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。
每轮信息必须需要传递给另一个人,且信息可重复经过同一个人
给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n-1 的小伙伴处的方案数;若不能到达,返回 0。

写这个题是我在刷动态规划的时候遇到的一个题,但是我动态规划没有想到思路,仔细思考了一下,发现它可以使用搜索算法来做,所以我就尝试了一下用自己比较擅长的深度优先搜索来解答,果不其然有解。下面说下我的思路:
题目要求从起点0到终点n-1的可能路径总和,所以可以从0开始遍历,一直遍历直到终点,如果遍历不通,那就是没有路径可以到达。但题目还给了一个条件就是只能走k步,也就是说,即使你到达了终点,用了超过k步或者少于k步,这个路径也不可行。可以设置变量step,每走一步step++,一旦step等于k,这时候再判断终点是否为n-1,如果是,那么路径数+1,否则该条路径无解,直接结束。代码如下;

int ans = 0;
    public int numWays(int n, int[][] relation, int k) {

     
        for (int i=0;i<relation.length;i++){

            if (relation[i][0] == 0) {
                dfs(relation,relation[i][1],1,k,n);
            }
        }
        return ans;
    }

    private void dfs(int[][] relation, int start, int step, int k,int n) {

        if (step == k) {
            if (start==n-1){
                ans++;
            }
            return;
        }

        
        for (int i=0;i<relation.length;i++){
            
            if (relation[i][0]==start){
                dfs(relation,start,step+1,k,n);
            }            
        }
    }

动态规划解法参考了别人的:

public int numWaysWithDp(int n, int[][] relation, int k) {

        int[][] dp = new int[k+1][n+1];

        //从0-0只有一种方法
        dp[0][0] = 1;
        for(int i=1;i<=k;i++){

            for (int j=1;j<=n;j++){

                //第i轮到达玩家j的方案数,就是前一个玩家到达玩家j的方案之和
                dp[i][relation[j][1]]+=dp[i-1][relation[j][0]];

            }
        }
        return dp[k][n-1];
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

玩家传递信息 的相关文章

随机推荐

  • SmartFusion从FPGA到ARM(一)——MSS_GPIO点灯

    文章目录 前言 0 开发环境准备 1 创建一个基本工程 2 配置MSS模块 3 生成示例工程 4 Keil编译ARM工程 5 FPGA工程加载Hex文件 6 下载运行 7 JTAG SEL管脚说明 示例工程下载 前言 本系列教程 将会以Sm
  • 【Redis】数据结构---String

    文章目录 String 字符串 1 Redis 键 key 2 String 字符串 2 1常用命令 2 2 String底层结构 3 空间分配策略 3 1空间预分配 3 2惰性空间释放 3 3为什么SDS的最大长度是512M 4 SDS面
  • MySQL Community Server的安装配置教程(Windows版本)

    1 了解MySQL Community Server MySQL Community Server是开源的MySQL数据库服务的名称 它是MySQL AB在2000年推出的一个开源数据库服务器 现在由Oracle公司维护和管理 MySQL
  • mac 升级系统到 bigsur navicat 打不开 找回本地保存的查询sql文件

    1 建议直接下载新版navicat https macwk com soft navicat premium 2 或者手动搜 直接访达搜navicat 搜到的目录里挨个进去看看 我的文件是在下面找到的 Navicat CC Common S
  • 毕设学习(一)——三相并网逆变器的simulink仿真

    毕设学习 一 三相并网逆变器的Simulink仿真 本系列将记录我的毕设学习过程 同时分享我的学习内容 欢迎大家讨论交流 如有错误还望大佬指正 文章目录 毕设学习 一 三相并网逆变器的Simulink仿真 前言 一 三相并网逆变器 二 Si
  • C 51单片机串口控制LED

    实验名称 串口控制LED和蜂鸣器 接线说明 实验现象 下载程序后 由串口助手以HEX格式发送如下命令控制LED和蜂鸣器 D1指示灯亮发送 11 0D 0A D1指示灯灭发送 10 0D 0A 蜂鸣器响发送 21 0D 0A 蜂鸣器停发送 2
  • pycharm如何找到python解释器,pycharm找不到解释器怎么办

    解决方法 1 打开磁盘 直接搜索python exe文件 获取该文件的路径 2 打开pycharm软件 依次点击 File Setting Project 点击右上角的设置图标 3 按照获取的路径找到python exe即可 IDi少儿编程
  • 谷粒学院SpringSecurity认证流程详解

    登录功能前端分析 前端会调用此接口去实现登录 登录 export function login username password return request url admin acl login method post data us
  • protobuf ubuntu 18.04环境下安装

    t20190518 luo luo All Series MyFile t20190518 luo luo All Series MyFile t20190518 luo luo All Series MyFile t20190518 lu
  • sharding-jdbc行分片策略默认不支持按分片键的范围查询

    目录 sharding jdbc行分片策略默认不支持按分片键的范围查询 原因 使用行分片策略 解决方案 使用标准分片策略 sharding jdbc 分片策略 sharding jdbc行分片策略默认不支持按分片键的范围查询 在开发时 对主
  • 网络空间安全概论 第八章 作业

    返回 本次得分为 12 00 16 00 本次测试的提交时间为 2020 02 15 如果你认为本次测试成绩不理想 你可以选择再做一次 1 判断 2分 在iOS的安全机制中 具有代表性的有权限分离 强制代码签名 地址空间随机分布和沙盒 由于
  • android AudioRecord

    AudioRecord是Android中用于音频录制的类 它的主要作用是捕获来自设备麦克风或其他音频源的音频数据 并将其保存为PCM格式的音频流 以供后续处理或存储 以下是关于AudioRecord的一些常见用途和基本使用方法 作用和用途
  • 国际化之表单校验

    国际化之表单校验 国际化整个项目的时候 表单校验的提示是个麻烦的事情 很多资料说用vee validate插件来实现这个功能 但是我觉得有点麻烦 不是很想用插件 然后就在validate js里面去捣鼓 然后发现在我们校验方法下是可以获取到
  • 数据库的事务

    以MySQL为视角 了解数据库的事务 目录 一 事务简介 1 概念 2 操作 3 例子 4 事务提交方式 二 事务的四大特征 ACID 1 原子性 atomicity 2 一致性 consistency 3 隔离性 isolation 4
  • Python: 用于计算txt文档的字数的小脚本

    在一次实践中 需要计算txt文档 英文和数字 的字数 并且还要统计路径下的所有txt文档的字数总数 本来以为很简单 但是在编写的过程中还是出现了一些问题 首先就是 字数和字符数是不一样的 不能简单的用len 根据英文的特性 每个单词都需要空
  • VUE iscroll

    https github com Dafrok vue iscroll view 基本使用方法 npm i vue iscroll view save dev npm i iscroll save dev import IScrollVie
  • uniapp scroll-view 隐藏滚动条

    如果是想全局隐藏的话 可以放在App vue中 如果是局部则在对应的页面中引入使用即可 ifdef MP WEIXIN APP PLUS webkit scrollbar display none width 0 important hei
  • C#贝塞尔曲线的应用-未读红点拖拽粘连效果

    前言 提示 仿照手机qq未读红点拖拽粘连效果 贝塞尔曲线的应用非常广泛 本篇文章将使用Winform贝塞尔曲线来实现QQ未读红点拖拽粘连的效果 手机QQ粘连效果 最终实现的效果 分析效果 1 可以看出随着拖拽的距离变大 固定点的圆会逐渐变小
  • 管理 Python 依赖项

    有几种不同的方法来管理 Python 依赖项 最常见的方法是使用 requirements txt 文件 其中列出了所有项目依赖项及其版本 然后 您可以通过运行 pip install r requirements txt 为您的项目安装所
  • 玩家传递信息

    小 A 和 ta 的小伙伴们玩传信息游戏 游戏规则如下 有 n 名玩家 所有玩家编号分别为 0 n 1 其中小朋友 A 的编号为 0 每个玩家都有固定的若干个可传信息的其他玩家 也可能没有 传信息的关系是单向的 比如 A 可以向 B 传信息