[蓝桥杯]路径之谜

article/2025/6/8 3:31:35

路径之谜

题目描述

小明冒充 XX 星球的骑士,进入了一个奇怪的城堡。

城堡里边什么都没有,只有方形石头铺成的地面。

假设城堡地面是 n×nn×n 个方格。如下图所示。

图1

按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着走,也不能跳跃。每走到一个新方格,就要向正北方和正西方各射一箭。(城堡的西墙和北墙内各有 nn 个靶子)同一个方格只允许经过一次。但不必走完所有的方格。如果只给出靶子上箭的数目,你能推断出骑士的行走路线吗?有时是可以的,比如上图中的例子。

本题的要求就是已知箭靶数字,求骑士的行走路径(测试数据保证路径唯一)

输入描述

第一行一个整数 NN (0≤N≤200≤N≤20),表示地面有 N×NN×N 个方格。

第二行 NN 个整数,空格分开,表示北边的箭靶上的数字(自西向东)

第三行 NN 个整数,空格分开,表示西边的箭靶上的数字(自北向南)

输出描述

输出一行若干个整数,表示骑士路径。

为了方便表示,我们约定每个小格子用一个数字代表,从西北角开始编号: 0,1,2,3 ⋯⋯

比如,上图中的方块编号为:

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

输入输出样例

示例

输入

4
2 4 3 4
4 3 3 3

输出

0 4 5 1 2 3 7 11 10 9 13 14 15

运行限制

  • 最大运行时间:5s
  • 最大运行内存: 256M

总通过次数: 12638  |  总提交次数: 16353  |  通过率: 77.3%

难度: 困难   标签: 2016, 国赛, DFS

骑士路径之谜:DFS算法解析与实现

问题分析

骑士从城堡西北角(左上角)出发,需到达东南角(右下角),移动规则如下:

  1. ​移动方式​​:横向或纵向移动(不能斜走或跳跃)
  2. ​箭靶机制​​:每到达新方格,需向正北(列箭靶)和正西(行箭靶)各射一箭
  3. ​路径约束​​:每个方格仅允许访问一次,且路径需满足给定的箭靶数字
  4. ​输出要求​​:输出用数字编号表示的路径(编号规则:行优先,从0开始)

代码展示:

#include <iostream>
#include <vector>
using namespace std;const int dx[4] = {0, 0, 1, -1};  // 右、左、下、上
const int dy[4] = {1, -1, 0, 0};  // 移动方向向量vector<int> path;          // 路径记录
vector<int> northTarget;   // 北箭靶(列靶)
vector<int> westTarget;    // 西箭靶(行靶)
vector<vector<bool>> visited;  // 访问标记
int n;                     // 城堡尺寸
bool found = false;        // 路径找到标志// DFS搜索函数
void dfs(int x, int y) {// 到达终点且箭靶归零if (x == n-1 && y == n-1) {for (int i = 0; i < n; i++) {if (northTarget[i] != 0 || westTarget[i] != 0) return;}found = true;return;}// 尝试四个方向for (int i = 0; i < 4; i++) {int nx = x + dx[i], ny = y + dy[i];// 检查新位置合法性if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;if (visited[nx][ny]) continue;if (westTarget[nx] <= 0 || northTarget[ny] <= 0) continue;// 更新状态visited[nx][ny] = true;westTarget[nx]--;northTarget[ny]--;path.push_back(nx * n + ny);dfs(nx, ny);  // 递归搜索if (found) return;// 回溯恢复状态visited[nx][ny] = false;westTarget[nx]++;northTarget[ny]++;path.pop_back();}
}int main() {cin >> n;// 初始化数据结构northTarget.resize(n);westTarget.resize(n);visited.resize(n, vector<bool>(n, false));// 输入箭靶数据for (int i = 0; i < n; i++) cin >> northTarget[i];for (int i = 0; i < n; i++) cin >> westTarget[i];// 起点处理visited[0][0] = true;westTarget[0]--;        // 起点影响西墙第0行northTarget[0]--;       // 起点影响北墙第0列path.push_back(0);      // 加入起点编号dfs(0, 0);  // 开始搜索// 输出路径for (int i = 0; i < path.size(); i++) {cout << path[i] << (i < path.size()-1 ? " " : "\n");}return 0;
}
关键优化策略
  1. ​箭靶剪枝​​:移动前检查目标位置对应的行/列箭靶剩余值(值≤0时终止分支)
  2. ​实时回溯​​:发现无效路径时立即恢复箭靶计数和访问状态
  3. ​方向优先级​​:按右→左→下→上的顺序探索(优先水平移动加速靠近终点)
  4. ​终止条件​​:到达终点时验证所有箭靶恰好归零(northTarget[i]==0 && westTarget[i]==0
复杂度分析
  • ​时间复杂度​​:最坏O(4n2),实际通过箭靶剪枝大幅降低
  • ​空间复杂度​​:O(n2)(存储访问矩阵和路径)
  • ​运行效率​​:满足n≤20的约束,5秒时限内可完成

示例输入验证:
​输入​​:42 4 3 44 3 3 3
​输出​​:0 4 5 1 2 3 7 11 10 9 13 14 15
对应路径:
0(0,0)→4(1,0)→5(1,1)→1(0,1)→2(0,2)→3(0,3)→7(1,3)→11(2,3)→10(2,2)→9(2,1)→13(3,1)→14(3,2)→15(3,3)

注意事项
  1. ​起点特殊处理​​:初始位置(0,0)需直接更新箭靶并标记访问
  2. ​编号转换​​:位置(x,y)的编号计算为x*n + y
  3. ​路径唯一性​​:题目保证唯一解,找到路径后立即终止搜索
  4. ​边界检查​​:移动时需验证新位置在[0, n-1]范围内

http://www.hkcw.cn/article/dRFiKjtQXJ.shtml

相关文章

奥威BI+AI数据分析:企业数智化转型的加速器

在当今数据驱动的时代&#xff0c;企业对于数据分析的需求日益增长。奥威BIAI数据分析的组合&#xff0c;正成为众多企业数智化转型的加速器。 奥威BI以其强大的数据处理和可视化能力著称。它能够轻松接入多种数据源&#xff0c;实现数据的快速整合与清洗。通过内置的ETL工具&…

大模型的外围关键技术

最简易前端&#xff1a;Gradio 基本介绍 Gradio 是一个用于快速创建可分享的机器学习模型界面的开源 Python 库。通过 Gradio&#xff0c;开发者能够轻松地为他们的模型创建前端界面&#xff0c;从而使非技术用户也可以通过简单的网页界面与这些模型进行交互。 Gradio 的一些…

electron定时任务,打印内存占用情况

// 监听更新 function winUpdate(){// 每次执行完后重新设置定时器try {// 获取当前时间并格式化为易读的字符串const now new Date();const timeString now.toLocaleString();console.log(当前时间: ${timeString});// 记录内存使用情况&#xff08;可选&#xff09;const m…

建筑工程施工进度智能编排系统 (SCS-BIM)

建筑工程施工进度智能编排 (SCS-BIM) 源码可见于&#xff1a;https://github.com/Asionm/SCS-BIM 项目简介 本项目是一个面向建筑工程的施工进度智能编制平台&#xff0c;用户只需上传一份标准 IFC 建筑信息模型文件&#xff0c;系统将自动完成以下任务&#xff1a; 解析模…

小红薯商品搜索详情分析与实现

前言 小红书作为国内知名的社交电商平台&#xff0c;拥有丰富的商品数据和用户评价信息。对于数据分析师、产品经理或电商从业者来说&#xff0c;能够获取小红书的商品数据具有重要的商业价值。本文将详细介绍如何通过逆向工程实现小红书商品搜索API的调用。 免责声明&#xf…

国标GB28181设备管理软件EasyGBS视频平台筑牢文物保护安全防线创新方案

一、方案背景​ 文物作为人类文明的珍贵载体&#xff0c;具有不可再生性。当前&#xff0c;盗窃破坏、游客不文明行为及自然侵蚀威胁文物安全&#xff0c;传统保护手段存在响应滞后、覆盖不全等局限。随着5G与信息技术发展&#xff0c;基于GB28181协议的EasyGBS视频云平台&…

使用 Python + ExecJS 获取网易云音乐歌曲歌词

&#x1f3b5; 使用 Python ExecJS 获取网易云音乐歌曲歌词 在本篇博客中&#xff0c;我们将通过一个完整的 Python 脚本&#xff0c;利用 execjs 模块调用 JavaScript 代码&#xff0c;成功获取网易云音乐的歌曲歌词。整个过程涵盖了加密参数的生成、API 请求发送与歌词提取…

云台式激光甲烷探测器:守护工业安全的“智慧之眼”

在石油化工、天然气场站、城市燃气管网等场景中&#xff0c;甲烷泄漏的早期监测是保障生产安全的核心防线。云台式激光甲烷探测器凭借高精度、无接触、智能化的技术优势&#xff0c;成为工业安全监测领域的革新者。本文将深度解析其技术原理、核心功能及适用场景&#xff0c;助…

基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破

【导读】 应对气候变化对非洲象的生存威胁&#xff0c;本研究创新采用无人机航拍结合AI姿态分析技术&#xff0c;突破传统观测局限。团队在肯尼亚桑布鲁保护区对比测试DeepLabCut与YOLO-NAS-Pose两种模型&#xff0c;首次将后者引入野生动物研究。通过检测象群头部、脊柱等关键…

CppCon 2014 学习:Anatomy of a Smart Pointer

智能指针&#xff08;smart pointer&#xff09;可以这样解释&#xff1a; 它是一个指针的容器——内部保存了一个普通指针&#xff0c;并且可以在需要时把指针交给你使用。它支持RAII&#xff08;资源获取即初始化&#xff09;&#xff0c;也就是说资源&#xff08;比如内存&…

GNhao,国外云手机号智能选择与应用解析!

GNhao&#xff0c;国外云手机号智能选择与应用解析&#xff01; 在数字时代&#xff0c;国外云手机号成为跨境沟通的关键。GNhao凭借其稳定的国外云手机号服务&#xff0c;满足了用户多样需求&#xff0c;提升了通讯效率。国外云手机号广泛应用于海外注册、跨境营销和社交&…

AcWing 843:n-皇后问题 ← dfs

【题目来源】 https://www.acwing.com/problem/content/845/ https://www.lanqiao.cn/problems/1508/learning/ https://www.luogu.com.cn/problem/P1219 【题目描述】 n 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任…

风机巡检方案艰难之路

2025年是“双碳”目标提出后首个五年计划收关节点&#xff0c;政策端通过强化大基地建设与海风开发确保既定风电目标落地。根据《2025年能源工作指导意见》&#xff0c;2025年将通过加速第二批/第三批大基地及海上风电建设保障目标兑现。据联储证券预计&#xff0c;2025年全年陆…

Java-redis实现限时在线秒杀功能

1.使用redisson pom文件添加redisson <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version></dependency> 2.mysql数据库表设…

龙虎榜——20250603

上证指数放量收阳线&#xff0c;阳包阴&#xff0c;量能超过5天均量&#xff0c;个股涨多跌少&#xff0c;行情有所回暖。 深证指数缩量收阳线&#xff0c;再次回打支撑位。 2025年6月3日龙虎榜行业方向分析 1. 医药&#xff08;创新药原料药出口&#xff09; 代表标的&…

永磁同步电机无速度算法--互补滑模观测器

一、原理介绍 采用了互补滑模变结构观测器&#xff0c;滑模面选择了广义滑模面和互补滑模面相结合的设计&#xff0c;这样可以有效地降低系统的跟踪误差&#xff0c;提高系统的跟踪性能&#xff0c;切换控制率选择饱和函数&#xff0c;抑制了传统SMC 的抖振现象。 二、仿真模型…

2025年AIR SCI1区TOP,多策略增强蜣螂算法MDBO+实际工程问题,深度解析+性能实测

目录 1.摘要2.蜣螂优化算法DBO原理3.改进策略4.结果展示5.参考文献6.代码获取7..算法辅导应用定制读者交流 1.摘要 蜣螂优化算法&#xff08;DBO&#xff09;作为一种创新元启发式算法&#xff0c;虽具备良好的数值优化能力&#xff0c;但存在收敛速度慢且易陷入局部最优的问题…

【notepad++】如何设置notepad++背景颜色?

如何设置notepad背景颜色&#xff1f; 设置--语言格式设置 勾选使用全局背景色 例如选择护眼色---80&#xff0c;97&#xff0c;205&#xff1b;

Gitee Wiki:重塑关键领域软件研发的知识管理范式

在数字化转型浪潮席卷全球的当下&#xff0c;关键领域软件研发正面临前所未有的知识管理挑战。传统文档管理模式的局限性日益凸显&#xff0c;知识传承的断层问题愈发严重&#xff0c;团队协作效率的瓶颈亟待突破。Gitee Wiki作为新一代知识管理平台&#xff0c;正在通过技术创…

电源防反接保护电路分析

电路&#xff1a; 这是一个电源输入防反接的电路&#xff0c;通过NMOS来实现。 1、正常接入电源。 正常接入电源的时候&#xff0c;VCC12V&#xff0c;这时候&#xff0c;电流通过R1、R2和NMOS的体二极管D形成一个回路&#xff0c;此时NMOS还未导通。 通过计算可以得到Vs0.7V&a…