「蓝桥杯题解」数字接龙

devtools/2025/1/15 13:49:18/

前言

这个是我的 ac 代码,里面的注释是用自己的话写的。因为我看蓝桥杯官方题解文字和代码分离,代码部分没有注释,看着巨难受,所以自己写了一版。感觉他们的视频解析也挺水的(小声

题目链接

代码

java">import java.util.*;/*** 数字接龙*/public class Main {static Scanner in = new Scanner(System.in);static int n,k;static final int N = 11;static int[][] board = new int[N][N];static boolean[][] vis = new boolean[N][N];// 8*2 向量数组,其中下标 1 3 5 7 为对角线方向static int[][] d = {{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};static boolean[][][][] line = new boolean[N][N][N][N]; // 用来判断 (x1,y1) 是否可以沿对角线方向走到 (x2,y2)static void dfs(int x1,int y1,ArrayList<Integer> path) {// 终止条件:到右下角的那个格子if (x1 == n-1 && y1 == n-1) {// 没有把所有格子走完,不符题意if (path.size() != n*n - 1) return;// 输出路径for(int x : path) {System.out.print(x);}System.exit(0);}// 调试用的:System.out.println("(x1,y1): " + x1 + "," +y1);// ps:vis[x1][y1] = true;  加了这句就可以不用专门写 vis[0][0] = true// ps:因为我们是按 i 从小到大枚举的,所以如果存在答案,那么最先找到的那条路径肯定是字典序最小的for (int i = 0; i < 8; i++) {int x2 = x1 + d[i][0],y2 = y1 + d[i][1];// 判断边界以及是否访问过if (x2 < 0 || x2 >= n || y2 < 0 || y2 >= n || vis[x2][y2]) continue;// 判断大小if ((board[x1][y1] + 1) % k != board[x2][y2] || line[x1][y1][x2][y2]) continue;// 沿对角线方向走,判断是否会交叉,这里四种情况(四个方向)只能分别老老实实写出来if(i == 1 && (line[x1 - 1][y1][x1][y1 + 1] || line[x1][y1 + 1][x1 - 1][y1])) continue ;if(i == 3 && (line[x1][y1 + 1][x1 + 1][y1] || line[x1 + 1][y1][x1][y1 + 1])) continue ;if(i == 5 && (line[x1][y1 - 1][x1 + 1][y1] || line[x1 + 1][y1][x1][y1 - 1])) continue ;if(i == 7 && (line[x1 - 1][y1][x1][y1 - 1] || line[x1][y1 - 1][x1 - 1][y1])) continue ;path.add(i);vis[x2][y2] = true;if (i % 2 == 1) line[x1][y1][x2][y2] = true;dfs(x2,y2,path);// 回溯path.remove(path.size()-1);vis[x2][y2] = false;if (i % 2 == 1) line[x1][y1][x2][y2] = false;}}public static void main(String[] args) {n = in.nextInt(); k = in.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {board[i][j] = in.nextInt();}}vis[0][0] = true;dfs(0,0,new ArrayList<>());System.out.println(-1);}
}

http://www.ppmy.cn/devtools/150692.html

相关文章

openmetadata二次开发之前端汉化

目录 1.背景 1.1 设置默认的语言为中文,应该如何修改代码 1.2 将未做国际化的页面做汉化,应该如何修改代码 1.3 配置连接信息的指导教程,应该如何汉化 2. 设置默认的语言为中文 2.1 查看源码当前项目为react构建的项目,使用的国际化插件为react-i18next和i18next 2.…

数据结构------树

前言&#xff1a;前面我们学习了栈和队列。今天我们来学习一种新的数据结构---------树。 首先我们来了解一下树的概念。 1.树的概念与结构 前面我们学习过的顺序表&#xff0c;栈都是一种顺序结构。链表&#xff0c;队列是链式结构。今天学习的树也是一种链式结构。它是由n…

infinitetensor训练营-cuda1

一、基础概念剖析&#xff1a; 1、延迟&#xff1a;发送内存请求——>实际完成数据移动所需的时间。可以理解为家到公司的距离 2、带宽&#xff1a;单位时间移动数据量&#xff0c;即数据传输的速度。可以理解为家到公司中间马路的宽度 我们这里举个例子&#xff0c;计算机…

idea无法下载源码

1. 方式一 在项目下&#xff0c;项目根目录下 或 pom.xml同级目录中执行 mvn dependency:resolve -Dclassifiersources然后点击“download source”时就能看到源码了。

基于深度学习的视觉检测小项目(十二) 使用线条边框和渐变颜色美化界面

到目前为止&#xff0c;已经建立起了基本的项目架构&#xff0c;样式表体系也初步具备&#xff0c;但是与成品的界面相比&#xff0c;还是差点什么。 我的界面效果图&#xff1a; 优秀demo的界面截图&#xff1a; 是的&#xff0c;我的界面太“平” 了&#xff0c;没有立体感&…

【专题】2025年节日营销趋势洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38813 在当今复杂多变且竞争激烈的消费市场环境下&#xff0c;节日营销已成为企业获取市场份额、提升品牌影响力的关键战略时机。我们深知深入洞察节日营销趋势对于企业决策的重要性。 本报告汇总基于对 2024 年多个关键消费节点及…

【论文阅读】基于空间相关性与Stacking集成学习的风电功率预测方法

文章目录 摘要0. 引言1. 空间相关性分析2. 风电功率预测模型2.1 Stacking 集成策略2.2 基学习器2.2.1 基于机器学习算法的基学习器2.2.2 基于神经网络的基学习器2.2.3 基于粒子群优化算法的超参数优化 2.3 元学习器2.4 基于空间相关性与Stacking集成学习的风电功率预测方法 3 算…

Elasticsearch学习(2) :DSL和RestClient实现搜索文档

之前的学习中——Elasticsearch学习(1) &#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以这篇我们研究下elasticsearch的数据搜索功能。我们分别使用DSL(Domain Specif…