蓝桥杯—数字接龙(dfs+减枝)

2024蓝桥杯省B好题分析 题解来自洛谷,作为学习 做题思路1.找一个 cnt[i]cnt[i] 用于记录从 H1,H2H1​,H2​ 一直到 HnHn​ 中能被 ii 整除的个数。 2.找到最大的 ii 使得 cnt[i]≥3cnt[i]≥3 记为 xx 3.从小到大排序 HH 数组。 4.从 11 到 nn 遍历,判断 Hi∣xHi​∣x ,输出前 3 个满足要求的数。 代码思路: 输入处理: 先读取输入,存储每个宝石的“闪亮度”到数组 中。 统计每个公约数的出现次数 阅读详情
AI摘要

该博客围绕蓝桥杯数字接龙问题展开,此问题是迷宫问题变种,需从左上角到右下角。解决思路包括用dx、dy数组表示8个方向向量;在dfs方法中加入下一个数值参数按规律数值串搜索;核心剪枝是用四维数组标记走过的对角线,判断连线时检测特定元素。最后给出了代码。

一.题目

二.思路

一看就是迷宫问题的变种,从左上角到达右下角,要解决

1.8个方向的方向向量,用dx,dy数组代表方向向量

2.要按照一个规律的数值串进行搜索0,1,2,k-1,0,1,2......,这个好实现只需要在dfs方法中加入一个下一个数值的参数搜索就行

3.核心减枝:斜对角线不能交叉(本题难点),这里用了一个四维数组来标记走过的对角线

(x,y)->(xx,yy)代表从对角线连线,mark[x][y][xx][yy],mark数组只用于记录对角线连线

由下图可知:

在判断是否能进行对角线连线时只需要检测mark[x][b][a][y]即可

三.代码

public static int n;
    public static int[] dx = {-1,-1,0,1,1,1,0,-1};//八个方向的方向向量,注意要按照题目要求
    public static int[] dy = {0,1,1,1,0,-1,-1,-1};
    public static boolean[][] mark = new boolean[11][11];//判断数组
    public static boolean[][][][] mark1 = new boolean[12][12][12][12];//判断是否交叉
    public static int[] res = new int[100];//记录答案
    public static boolean t;//用于记录是否有路径可以到达右下角
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        int k = scan.nextInt()-1;
        int[][] map = new int[n+1][n+1];
        for(int i = 1;i<=n;i++)
        {
            for(int j = 1;j<=n;j++)
            {
                map[i][j] = scan.nextInt();
            }
        }
        mark[1][1] = true;
        dfs(1,1,map,k,0,1);
        //数据范围很小dfs暴力搜索
        if(t==false) System.out.println(-1);
        scan.close();
    }
    public static void dfs(int x,int y,int[][] map,int k,int index,int cnt)//index走了几个格子,cnt下一步数值
    {
        if(t==true) return;
        if(index == n*n-1&&x==n&&y==n)//说明走完了,因为是按照字典顺序进行搜索的,所以第一个结果就是字典顺序最小的结果
        {
            t = true;
            for(int i = 0;i<n*n-1;i++)
            {
                System.out.print(res[i]);
            }
            System.out.println();
            return;
        }
        for(int i = 0;i<8;i++)
        {
            int xx = x + dx[i];
            int yy = y + dy[i];
            if(check(xx,yy,cnt,map))//说明没有走过,并且数值满足
            {
                if(i==1||i==3||i==5||i==7)//斜线走的(x,y)->(xx,yy)
                {
                    if(mark1[x][yy][xx][y]==true)
                        continue;
                    mark1[x][y][xx][yy] = true;
                    mark1[xx][yy][x][y] = true;
                }
                mark[xx][yy] = true;
                res[index] = i;//记录结果
                int tmp = cnt;
                if(cnt==k)  cnt = 0;
                else cnt++;
                dfs(xx,yy,map,k,index+1,cnt);
                mark[xx][yy] = false;
                cnt = tmp;
                if(i==1||i==3||i==5||i==7) {//注意只有在i为奇数时才会操作对角线,这里的作用也是减枝
                    mark1[x][y][xx][yy] = false;
                    mark1[xx][yy][x][y] =false;
                }
            }
        }
    }
    public static boolean check(int x,int y,int cnt,int[][] map)//减枝
    {
        if(x>=1&&x<=n&&y>=1&&y<=n&&mark[x][y]==false)//根据题意出现交叉的无所谓不用处理
        {
            if(map[x][y]==cnt) return true;
        }
        return false;
    }

開機自動進入UEFI Interactive Shell無法正常開機怎麼辦? BIOS/UEFI,啟動後進入UEFI Interactive Shell大多數人都告訴你沒有安裝系統去裝系統吧,但你明明昨天還在運行系統?今天就這樣?有沒有解決辦法? 阅读详情

相关推荐

终端效率神器:Tmux 安装与使用全指南

终端效率神器:Tmux 安装与使用全指南

身在被窝_心在编程 1357

数字接龙(蓝桥杯)

因此行进路径可以用一个包含 0 . . . 7 之间的数字字符串表示,如下图 1是一个迷宫示例,它所对应的答案就是:41255214。这段代码使用了深度优先搜索算法来找到一条合法的路径,它考虑了路径的唯一性和循环序列的要求。小蓝最近迷上了一款名为《数字接龙》的迷宫游戏,游戏在一个大小为N × N 的格子棋盘上展开,其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。这段代码是一个基于深度优先搜索(DFS)的算法,用于解决一个特定的路径问题,其中需要考虑路径的字典序。,表示没有格子被访问过。

m0_73841621的博客 3096

iOS中.obj、.usdz、.dae和.scn格式之间的转化(思路清晰版)

作者最近在写项目的过程中遇到了一些3d模型格式问题,故写下这篇文章记录一下解决问题的过程。

yueliangmua的博客 5586

第十五届蓝桥杯C/C++B组题解——数字接龙

图中,我画出了(1,3,5,7)走法的原点和下一个点,此外,我还标记了两个点,请读者细想,如果这两个点同时被访问过了,是不是说明,两点中间有一条路径,并且与当前路径形成了交叉。2. 对于路径经过的棋盘格子,按照经过的格子顺序,上面的数字组成的序列要满足:0, 1, 2, . . . , K − 1, 0, 1, 2, . . . , K − 1, 0, 1, 2 . . .。这也是这个题目的难点,什么叫做交叉?这在赛场上就是送分的信息,如果一时间没有很好的思路,那么输出-1,抢分,不失为一种很好的策略。

blue的博客 5200

深入解析ffmpeg编码错误:avcodec_send_frame()返回-22的排查与修复

本文深入解析FFmpeg编码中avcodec_send_frame()返回-22(AVERROR(EINVAL))错误的根本原因与系统排查方法。核心问题通常在于编码器未正确打开或上下文传递错误。文章提供了从检查编码器查找、确认avcodec_open2()调用,到验证上下文传递的完整修复指南,并附有可运行的代码示例,帮助开发者快速定位并解决这一常见编码障碍。

weixin_28049429的博客 389

K-L展开 (Karhunen-Loeve expansion)

K-L变换

susan_wang1的博客 2万+

蓝桥杯2024年第十五届省赛真题-数字接龙

思路:DFS,因为输入的i,j的顺序导致,方向向量中x是行编号,y是列编号。方向向量可能和直觉上不同。

专注于AI领域前沿知识,业余爱好开发软件 1853

《LabVIEW ZYNQ实战指南》第6章>>案例解析:基于USB WiFi模块的ZYNQ无线通信部署与Linux RT开发

本文详细解析了如何为ZYNQ开发板部署USB WiFi模块,实现无线通信。通过LabVIEW Linux RT环境,利用封装好的驱动VI,开发者可轻松配置ZYNQ连接无线网络,摆脱网线束缚,实现程序无线部署与远程调试,为工业物联网应用奠定基础。

app77的博客 754

蓝桥杯 数字接龙

输出一行表示答案路径,用方向编号组成的字符串表示。为方便表示,我们对可以行进的所有八个方向编号如下。小蓝最近迷上了一款名为《数字接龙》的迷宫游戏。的格子棋盘上展开,其中每一个格子处都有一个。方向移动到下一个格子(共 8 个方向)。,分别表示棋盘的边长和数字序列的周期长度。个整数,表示棋盘格子上的数字。因此,行进路径可以用一个包含。比较有难度的是如何保证不交叉。出发,目标是到达右下角。这本质上是一道dfs搜索题。,因为这样会形成交叉。的数字字符串来表示。

wuqingshun314159的博客 793

数据集FFHQ和LSUN介绍【包含FFHQ1024,515,256,128分辨率图像获取方法】

FFHQ全称Flickr-Faces-High-Quality(Flickr-Faces-HQ),最初是作为生成式对抗网络(GAN)的基准创建的,也用于StyleGAN的训练数据集中,并由英伟达于2019年开源。CVPR_2019Flickr-Faces-HQ (FFHQ)其由 70,000 张分辨率为 1024×1024 的高质量 PNG 图像组成,在年龄、种族和图像背景方面包含相当大的差异。它对眼镜、太阳镜、帽子等配饰也有很好的覆盖。

zik的博客 3976

振镜控制卡硬件接口揭秘:XY2-100/SL2-100协议对比

本文对比分析了工业振镜控制领域两种主流数字通信协议XY2-100和SL2-100的硬件接口差异与应用场景。XY2-100作为开放式协议兼容性强,采用LVDS差分信号传输,适用于激光打标等中高精度场景;SL2-100为半封闭协议,采用RS485差分信号,专为高速响应场景设计。文章详细解析了两种协议的引脚定义、通信机制和性能参数,指出XY2-100适配多品牌振镜且调试简单,SL2-100则更适合Nutfield专用设备的高速高精度需求。最后提供了接口调试的实操建议和选型逻辑,强调应根据具体应用场景的精度、速度和

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 635

蓝桥杯c/c++程序设计——接龙数组

这段程序的功能是计算用输入的数字串构成的环中,最少需要改变几个数字的位置,使得相邻两个数字的首位和末位能够连接起来。相应的改变次数即为 n 减去最大的循环长度。 程序首先接收一个数字 n,表示接下来会有 n 个数字串。 接下来,程序通过循环将输入的数字串转换为首位和末位对应的数字,并对这些数字进行处理,找出最大循环长度。 最后程序输出 n 减去最大的循环长度。 这段代码中使用了两个数组 f 和 g,其中 f 数组记录了以当前位置为结尾的最长循环长度,g 数组记录了以对应数字为起始点的最长循环长度。通

weixin_66547608的博客 3402

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 326

[蓝桥杯] 接龙数列(C语言)

洛谷P92412[蓝桥杯 2023 省 B] 接龙数列,c语言版本

2302_81044676的博客 4292

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

dfs之数字接龙

题目描述:小蓝最近迷上了一款名为《数字接龙》的迷宫游戏,游戏在一个大小为 N×NN×N 的格子棋盘上展开,其中每一个格子处都有着一个 0…K−10…K−1 之间的整数。游戏规则如下:从左上角 (0,0)(0,0) 处出发,目标是到达右下角 (N−1,N−1)(N−1,N−1) 处的格子,每一步可以选择沿着水平/垂直/对角线方向移动到下一个格子。

m0_74831908的博客 973

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

蓝桥杯 数字接龙 深度优先搜索 dfs C++

小蓝最近迷上了一款名为《数字接龙》的迷宫游戏,游戏在一个大小为 N x N 的格子棋盘上展开,其中每一个格子处都有着一个0...K -1之间的整数。游戏规则如下:1.从左上角(0,0)处出发,目标是到达右下角(N-1,N-1)处的格子,每一步可以选择沿着水平/垂直/对角线方向移动到下一个格子。2.对于路径经过的棋盘格子,按照经过的格子顺序,上面的数字组成的序列要满足:0,1,2,…,K−1,0,1,2,…,K−1,0,1,2…。3.途中需要对棋盘上的每个格子恰好都经过一次(仅一次)。

Donald_wsn的博客 643

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

蓝桥杯真题——数字接龙

蓝桥杯真题——数字接龙

2301_80037953的博客 616

蓝桥杯真题讲解:接龙序列

【代码】蓝桥杯真题讲解:接龙序列。

Turing_Sheep的博客 3241

蓝桥杯 C/C++5 天逆袭省一之第三天 ——深度优先搜索(DFS)与广度优先搜索(BFS)

深度优先搜索是一种用于遍历或搜索树、图等数据结构的算法。它从起始节点出发,沿着一条路径尽可能深地探索,直到无法继续,然后回溯到上一个节点,尝试其他路径,直至遍历完所有可能的路径。DFS 的核心在于递归或借助栈来模拟递归过程。从初始状态开始,选择一个分支深入探索,同时标记已访问的状态以避免重复。遇到无法继续的情况(如边界条件、不满足条件等)时回溯,继续探索其他分支,直到找到目标状态或遍历完所有状态。广度优先搜索是一种用于遍历或搜索树、图等数据结构的算法。

SUN19326410095的博客 1469

【DFS】数字接龙(深度优先搜索+路径检查)

深度优先搜索的实现路径约束条件的处理回溯法的正确使用字典序问题的处理技巧。

hongjianMa的博客 711

蓝桥杯十五届省赛真题——数字接龙

2. 对于路径经过的棋盘格子,按照经过的格子顺序,上面的数字组成的序列要满足:0, 1, 2, . . . , K − 1, 0, 1, 2, . . . , K − 1, 0, 1, 2 . . .。小蓝最近迷上了一款名为《数字接龙》的迷宫游戏,游戏在一个大小为N × N 的格子棋盘上展开,其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。4. 路径中不可以出现交叉的线路。例如之前有从 (0, 0) 移动到 (1, 1),那么再从 (1, 0) 移动到 (0, 1) 线路就会交叉。

weixin_74031499的博客 1525

P10427 [蓝桥杯 2024 省 B] 数字接龙

【代码】P10427 [蓝桥杯 2024 省 B] 数字接龙。

2501_91282886的博客 1090

蓝桥杯真题 19712.数字接龙

对于路径经过的棋盘格子,按照经过的格子顺序,上面的数字组成的序列要满足:0,1,2,…,K−1,0,1,2,…,K−1,0,1,2…,K−1,0,1,2,…,K−1,0,1,2…K−1 之间的整数。例如之前有从 (0,0)(0,0) 移动到 (1,1)(1,1) ,那么再从 (1,0)(1,0) 移动到 (0,1)(0,1) 线路就会交叉。从左上角 (0,0)(0,0) 处出发,目标是到达右下角 (N−1,N−1)(N−1,N−1) 处的格子,每一步可以选择沿着水平/垂直/对角线方向移动到下一个格子。

2301_81848095的博客 599

蓝桥杯数字接龙游戏解题思路与实现

平台提供了完整的代码编辑环境和运行环境,不需要本地安装任何开发工具。我实际使用中发现,它特别适合快速验证算法思路,一键运行就能看到结果,对于算法练习和竞赛准备很有帮助。数字接龙游戏的核心在于找到一条满足特定规则的路径。这个游戏要求在N×N的棋盘上,从左上角走到右下角,路径上的数字必须按0到K-1的循环顺序排列,每个格子只能访问一次,且路径不能交叉。对于这类需要交互展示的项目,平台还提供了一键部署功能,可以方便地分享给其他人查看运行效果。DFS适合这类需要探索所有可能性的问题,同时可以通过剪枝优化搜索效率。

IronwoodStag78的博客 246

数字接龙(dfs)(蓝桥杯)

非常好的联系dfs的一道题目!推荐看这位大佬的详解——>

sssvangen的博客 529

接龙序列dfs

一个蓝桥杯算法小白的备战,本来这道题目没什么头绪,看了大佬的解析后茅塞顿开,给大家分享一下。dp在下一篇文章会发出。

2301_80092918的博客 442
上一篇: 第15届蓝桥杯java-c组省赛真题
下一篇: Java语法篇—JDBC
Vaclee
博客等级 码龄3年 471粉丝 59原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值