【蓝桥杯】:蓝桥杯之路径之谜

在这里插入图片描述
在这里插入图片描述

  1. 题目分析
    • 这是一道路径谜题,描述了一个骑士在一个(n\times n)方格组成的城堡中行走的问题。
    • 骑士从西北角(入口)走到东南角(出口),可以横向或纵向移动,但不能斜着走,也不能跳跃。
    • 每走到一个新方格,要向正北方和正西方各射一箭,城堡的西墙和北墙各有(n)个靶子。
    • 同一个方格只允许经过一次,题目要求根据靶子上箭的数目推断骑士的行走路线。
  2. 解题思路
    • 可以使用深度优先搜索(DFS)来解决这个问题。
    • 从入口开始,尝试向四个方向(东、南、西、北)移动,每次移动到一个新方格时,检查是否满足条件(不能斜着走,不能跳跃,同一个方格只允许经过一次)。
    • 每移动到一个新方格,记录下对靶子的影响(正北方和正西方的靶子箭数加1)。
    • 如果移动到的方格是出口,且靶子上的箭数与题目给出的一致,则找到了一条可行的路径。
    • 如果在某一步无法继续移动(所有方向都不符合条件),则需要回溯到上一步,尝试其他方向。
  3. 深度优先遍历(DFS)思想
    • 基本概念
      • 深度优先遍历是一种图(或树)的遍历算法。它从起始节点开始,沿着一条路径尽可能深地探索下去,直到无法继续或达到目标,然后回溯到上一个未完全探索的节点,继续探索其他路径。
    • 实现方式
      • 通常使用递归或栈来实现。在递归实现中,函数会不断调用自身来深入探索图的节点,直到达到终止条件。在栈实现中,将节点压入栈中,每次从栈顶取出节点进行探索。
    • 应用场景
      • 常用于寻找图中的路径、连通分量、拓扑排序等问题。在本题中,用于寻找骑士在城堡中的可行路径。
  4. 回溯思想
    • 基本概念
      • 回溯是一种在搜索过程中进行剪枝的技术。当发现当前路径不可能达到目标时,回退到上一个状态,尝试其他可能的路径。
    • 实现方式
      • 在搜索算法中,当遇到不满足条件的情况时,撤销当前操作,返回到上一步操作的状态,然后尝试其他选择。
    • 应用场景
      • 常用于解决组合优化问题、迷宫问题、数独问题等。在本题中,当骑士走到一个无法继续前进的方格时,需要回溯到上一个方格,尝试其他方向的移动。

通过以上思路和算法思想,可以尝试编写代码来解决这道路径谜题。

#include<iostream>
#include<vector>
//#include<bits/stdc++.h>
int n, a[25], b[25], k1, k2;
//定义一个二维数组标记上下左右;
const int v[4][2] = { 0, 1, 0, -1, 1, 0, -1, 0 };
int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };
//int flag;//标记默认为0;
int flag;
int vis[25][25], num, s[600];
using namespace std;
//实现我们的dfs;
void dfs(int x, int y, int k)
{//判断边界情况1;if (x < 1 || y < 1 || x > n || y > n){return;}//判断边界情况2;b[x]表示行数没有走过;a[y]表示列数没有没走过;//if (b[x] < 0 || a[y] || flag == 1)//{//    return;//}if (b[x] < 0 || a[y] < 0 || flag == 1)//防止我们误判当前没有越过起点;{return;}//成功的情况下;s[k] = (x - 1) * n + (y - 1);//找到答案就返回;if (x == n && y == n && k1 == 1 && k2 == 1){//正难则反;从终点倒推到起点的(k1==1&&k2==1)的位置;//不要去想展开图 我们相信我们走到这一步已经完成了我们的走到终点的目的;flag = 1;num = k;//num变量存储我们的k步;return;}for (int i = 0; i < 4; i++){int xx = x + dx[i], yy = y + dy[i];//上下左右遍历矩阵;if (vis[xx][yy])//如果这个点已经走过了则跳过当前点;{continue;//如果这个点遍历过则跳过该点(题目要求);}b[xx]--;a[yy]--;k1--;k2--;vis[xx][yy] = 1;//标记此点已经被遍历过了;dfs(xx, yy, k + 1);//从下一个点继续遍历;//恢复现场;b[xx]++;a[yy]++;k1++;k2++;vis[xx][yy] = 0;//标记为false重新遍历;}
}
//void dfs(int x, int y, int k)    //常规dfs搜索模板;
//{
//    if (x < 1 || y < 1 || x > n || y > n) return;    //判断越界;
//    //if (b[x] < 0 || a[y] < 0 || flag == 1) return;    //不符合题意或找到答案了就返回;
//    //坐标索引公式:假设矩阵的大小是 n* m 那么对于位置(x, y) 其在一维数组中的索引可以通过公式 index = x * m + y 来计算;
//    s[k] = (x - 1) * n + (y - 1);      //记录路径,(编号可用坐标表示为i*m+j,m为列数);
//    if (x == n && y == n && k1 == 1 && k2 == 1)    //找到答案就返回;
//    {
//        num = k;
//        return;
//        //不要去想展开图 我们相信我们走到这一步已经完成了我们的走到终点的目的;
//    }
//    for (int i = 0; i < 4; i++)    //查找右左下上;
//    {
//        int xx = x + v[i][0];
//        int yy = y + v[i][1];
//        if (vis[xx][yy] == 1) continue;    //该点走过,跳过;
//        b[xx]--;
//        a[yy]--;
//        k1--;
//        k2--;
//        vis[xx][yy] = 1;
//        dfs(xx, yy, k + 1);
//        b[xx]++;                      //回溯,还原值;
//        a[yy]++;
//        k1++;
//        k2++;
//        vis[xx][yy] = 0;
//    }
//}
int main()
{cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];k1 += a[i];//记录每列要走的总数;}for (int i = 1; i <= n; i++){cin >> b[i];k2 += b[i];;}flag = 0;vis[1][1] = 1;//第一个位置的坐标为true;dfs(1, 1, 1);//dfs深度优先遍历从第一个坐标开始遍历;for (int i = 1; i <= num; i++){cout << s[i] << " ";}return 0;
}

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

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

相关文章

Mybatis 入门

Mybatis 入门 一、简介 mybatis 是一个优秀的基于 java 的持久层框架&#xff0c;它内部封装了 jdbc&#xff0c;使开发者只需要关注 sql 语句本身&#xff0c; 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis 通过 xml 或注解的方式将要…

《Java核心技术 卷II》流的创建

流的创建 Collection接口中stream方法可以将任何集合转换为一个流。 用静态Stream.of转化成数组。 Stream words Stream.of(contents.split("\\PL")); of方法具有可变长参数&#xff0c;可以构建具有任意数量的流。 使用Array.stream(array,from,to)可以用数组…

uniapp:微信小程序文本长按无法出现复制菜单

一、问题描述 在集成腾讯TUI后&#xff0c;为了能让聊天文本可以复制&#xff0c;对消息组件的样式进行修改&#xff0c;主要是移除下面的user-select属性限制&#xff1a; user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms…

UFS供电

UFS device结构图如上所示&#xff0c;可以看到有三路电源&#xff1a;VCC&#xff0c;VCCQ和VCCQ2。定义如下&#xff1a; 这三路电压参数如下&#xff1a; 上电时序如下所示&#xff1a; 但实际使用的UFS device产品&#xff0c;可能与spce略有不同。我看到的几款三星、美光和…

c++类和对象(六个默认成员函数)

文章目录 一.类的六个默认成员函数二.构造函数1.概念2.特性 三.析构函数1.概念2.特性 四.拷贝构造函数1.概念2.特性 五.赋值操作符重载5.1运算符重载5.2 赋值运算符重载 一.类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中什么都没有吗&#x…

互联网直播点播平台EasyDSS无人机视频推拉流技术实现工地远程监控巡检直播

在建筑行业&#xff0c;施工现场的安全管理和实时监控一直是项目管理中的重点。随着技术的进步&#xff0c;无人机工地直播技术成为了一种新兴的解决方案&#xff0c;它不仅能够提高施工透明度&#xff0c;还能够加强现场安全管理。EasyDSS作为一种先进的流媒体技术平台&#x…

如何使用网络工具进行网络性能评估

网络评估是对IT基础设施的系统评估&#xff0c;以确保它能够很好地满足企业的核心运营需求&#xff0c;确定了基础设施中需要改进的领域&#xff0c;并定义了改进的范围。 网络评估工具分析IT基础设施的各个方面&#xff0c;它通过评估网络设备、网络性能和安全威胁来仔细检查…

【Java项目】基于SpringBoot的【人职匹配推荐系统】

【Java项目】基于SpringBoot的【人职匹配推荐系统】 技术简介&#xff1a;本系统使用采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;人职匹配推荐系统分为管理员和用户、企业三个权限子模块。 管理员所能使用的功能主要有&#xff1a;首页、个…

ROS2+OpenCV综合应用--10. AprilTag标签码追踪

1. 简介 apriltag标签码追踪是在apriltag标签码识别的基础上&#xff0c;增加了小车摄像头云台运动的功能&#xff0c;摄像头会保持标签码在视觉中间而运动&#xff0c;根据这一特性&#xff0c;从而实现标签码追踪功能。 2. 启动 2.1 程序启动前的准备 本次apriltag标签码使…

【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)

文章目录 Section 3&#xff1a;Vim Essentials&#xff08;Vim 核心知识&#xff09;S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1&#xff1a;D HJK…

【时时三省】(C语言基础)动态内存函数calloc

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 calloc calloc函数也用来动态内存分配 原型如下: void* calloc&#xff08;size&#xff3f;t num, size&#xff3f;t size&#xff09;&#xff1b; 它们两个的区别是 它是需要两个参数…

LeetCode - 初级算法 数组(两个数组的交集 II)

两个数组的交集 II 这篇文章讨论如何求两个数组的交集,并返回结果中每个元素出现的次数与其在两个数组中都出现的次数一致。提供多个实现方法以满足不同场景需求。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定两个整数数组 nums1 和 nums2,以数…

[react]小技巧, ts如何声明点击事件的类型

很简单, 鼠标放到事件上面就行了 如果想知道点击的是什么元素 ,打印他的nodename就行了 不过得断言为html元素才行 const handleClick (e: React.MouseEvent<HTMLDivElement, MouseEvent>) > {console.log(current, (e.target as HTMLElement).nodeName);}; 为什么…

[创业之路-229]:《华为闭环战略管理》-5-平衡记分卡与战略地图

目录 一、平衡记分卡 1. 财务角度&#xff1a; 2. 客户角度&#xff1a; 3. 内部运营角度&#xff1a; 4. 学习与成长角度&#xff1a; 二、BSC战略地图 1、核心内容 2、绘制目的 3、绘制方法 4、注意事项 一、平衡记分卡 平衡记分卡&#xff08;Balanced Scorecard&…

【中间件】docker+kafka单节点部署---zookeeper模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控&#xff0c;先在测试环境部署单节点kafka验证…

【mysql】linux安装mysql客户端

参考文章&#xff1a; MySQL系列之如何在Linux只安装客户端 linux下安装mysql客户端client MySQL Community Downloads 查看linux版本方法&#xff1a; lsb_release -a cat /proc/version下载文件&#xff1a; rpm -ivh mysql-community-*可以删除错误的包&#xff1a; RP…

怎么在家访问公司服务器?

在日常工作中&#xff0c;特别是对信息技术从业者而言&#xff0c;工作往往离不开公司的服务器。他们需要定期访问服务器&#xff0c;获取一些关键的机密文件或数据。如果您在家办公&#xff0c;并且需要处理未完成的任务&#xff0c;同时需要从公司服务器获取所需的数据&#…

Unity编译Android apk包进度奇慢或gradle报错的解决方案

最近遇到Unity编译Android apk进度卡在"Calling IPostGenerateGradleAndroidProject callbacks"进度一直不变&#xff0c;如下图&#xff1a; 最后提示编译失败&#xff0c;类似错误如下&#xff1a; Picked up JAVA_TOOL_OPTIONS: -Dfile.encodingUTF-8FAILURE: Bu…

【机器学习案列】车牌自动识别系统:基于YOLO11的高效实现

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!

本文将详细介绍 Docusign 与蓝凌 EKP 的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 在当今数字化办公环境中&#xff0c;企业对于提高工作效率和提升用户体验的需求日益迫切。蓝凌…