蓝桥杯-路径之谜

题目描述

小明冒充X星球的骑士,进入了一个奇怪的城堡。城堡里面什么都没有,只有方形石头铺成的地面。
假设城堡的地面时n*n个方格。如下图所示。
在这里插入图片描述
按习俗,骑士要从西北角走到东南角。可以横向或者纵向移动,但是不能斜着走,也不能跳跃。没走到一个新方格,就要向正北方和正西方各射一箭。(城堡的西墙和北墙内各有n个靶子)同一个方格只允许经过一次。但不必走完所有的方格。如果只给出靶子上箭的数目,你能推断出骑士的行走路线吗?有时是可以的,比如上图中的例子。
本题的要求就是已知箭靶数字,求骑士的行走的路径(测试数据保证路径唯一)。

输入描述

第一行一个整数N(0≤N≤20),表示地面有N*N个方格。
第二行N个整数,空格分开,表示北边的箭靶上的数字(自西向东)
第二行N个整数,空格分开,表示西边的箭靶上的数字(自北向南)

输出描述

输出一行若干个整数,表示骑士路径。
为了方便表示,我们约定每一个小格子用一个数字代表,从西北角开始编号: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

题目分析

题目分析:
  本题是一个路径推断问题,需要根据已知的箭靶数字来推断骑士在城堡内的行走路径。
  首先,我们需要理解题目中的规则和要求。骑士从西北角走到东南角,每次移动到一个新的方格,都需要向正北方和正西方各射一箭。每个方格只能经过一次,且不需要走完所有的方格。
  根据输入描述,我们知道第一行输入是整数N,表示地面有NxN个方格。第二行是北边箭靶上的数字,表示自西向东的顺序。第三行是西边箭靶上的数字,表示自北向南的顺序。
  输出描述要求我们输出一行若干个整数,表示骑士的路径。编号约定是从西北角开始编号:0, 1, 2, 3…
思路:
  为了解决这个问题,我们可以使用回溯法(Backtracking)来搜索所有可能的路径,直到找到符合要求的路径为止。下面是解题思路的步骤:
  初始化一个N*N的矩阵,用于记录每个方格是否被访问过。初始时,将所有方格标记为未访问。
  从起点(0,0)开始,尝试向下或向右移动,每次移动后更新当前位置,并将对应的方格标记为已访问。
  在每次移动后,更新箭靶上的数字,即向正北方和正西方各增加一箭的数量。
  如果当前位置是终点(N-1,N-1),则检查箭靶上的数字是否符合要求。如果符合要求,则将当前路径加入结果列表。
  如果当前位置不是终点,继续尝试向下或向右移动,重复步骤2-4。
  当所有可能的路径都被尝试过后,返回结果列表中的第一个有效路径作为最终答案。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=21;
int row[N],col[N]; // 定义行和列的数组
int n; // 定义矩阵的大小
int dx[]={-1,0,1,0},dy[]={0,-1,0,1}; // 定义四个方向的偏移量
vector<int> path; // 用来存储路径
bool st[N][N]; // 定义状态数组,用于记录每个位置是否已经访问过// 深度优先搜索函数
bool dfs(int x,int y)
{if(x==n-1 && y==n-1) // 如果到达终点{for(int i=0;i<n;i++)if(row[i]!=0 || col[i]!=0) // 如果还有未访问的行或列,返回falsereturn false;return true; // 否则返回true}for(int i=0;i<4;i++) // 遍历四个方向{int a=x+dx[i],b=y+dy[i]; // 计算下一个位置的坐标if(a<0 || a>=n || b<0 || b>=n || st[a][b]) continue; // 如果越界或者已经访问过,跳过if(row[a]<=0 || col[b]<=0) continue; // 如果该位置无法访问,跳过st[a][b]=true; // 标记该位置已访问row[a]--,col[b]--; // 更新行和列的剩余数量path.push_back(a*n+b); // 将该位置加入路径if(dfs(a,b)) return true; // 如果找到一条路径,返回truest[a][b]=false; // 回溯,恢复该位置的状态row[a]++,col[b]++; // 恢复行和列的剩余数量path.pop_back(); // 回溯,将该位置从路径中移除}return false; // 如果四个方向都无法继续前进,返回false
}int main()
{cin>>n; // 输入矩阵的大小for(int i=0;i<n;i++) cin>>col[i]; // 输入列的数量for(int i=0;i<n;i++) cin>>row[i]; // 输入行的数量col[0]--,row[0]--; // 将起点的行列数量减一st[0][0]=true; // 标记起点已访问path.push_back(0); // 将起点加入路径dfs(0,0); // 从起点开始深度优先搜索for(auto x:path) cout<<x<<' '; // 输出路径return 0;
}

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

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

相关文章

整数的表示和运算

目录 无符号整数 有符号整数 原码表示 原码的缺点 原码-->反码-->补码的转换 原码,补码快速转换技巧(手算) 补码的加法计算 补码的减法计算 总结 无符号整数 无符号整数,即"自然数",0,1,2,3,4,.... C语言中的无符号整数: unsigned short a 1; //无符…

Spark Stream

一、Spark Streaming是什么 Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多&#xff0c;例如&#xff1a;Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如&#xff1a;map、reduce、join、wind…

C++ | Leetcode C++题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; class Solution { public:string addBinary(string a, string b) {string ans;reverse(a.begin(), a.end());reverse(b.begin(), b.end());int n max(a.size(), b.size()), carry 0;for (size_t i 0; i < n; i) {carry i < a.siz…

算法学习系列(五十五):背包模型(三)

目录 引言一、潜水员二、背包问题求具体方案三、机器分配四、开心的今明五、金明的预算方案 引言 今天介绍的是背包模型&#xff0c;还是以题目的形式来介绍的。主要讲了背包问题求方案&#xff0c;就是由最优方案递推回去即可。还有就是一些比较经典的背包问题&#xff0c;其…

im即时通讯源码/仿微信app源码+php即时通讯源码带红包+客服+禁言等系统php+uniapp开发

即时通讯(IM)系统是现代互联网应用中不可或缺的一部分&#xff0c;它允许用户进行实时的文本、语音、视频交流。随着技术的发展&#xff0c;IM系统的功能越来越丰富&#xff0c;如红包、客服、禁言等。本文将探讨如何使用PHP语言开发一个功能完备的即时通讯系统&#xff0c;包括…

逻辑漏洞:Cookie脆弱性导致的逻辑漏洞

前几天学习了逻辑漏洞中的越权漏洞和支付漏洞&#xff0c;今天学习一下cookie脆弱性导致的逻辑漏洞 还是和之前一样&#xff0c;所有内容都是参考别的大佬总结好的&#xff0c;我只是在这里进行学习练习 1、cookie介绍 用户在客户端 (一般为浏览器) 中访问某个页面 &#xff0…

电脑崩溃了,之前备份的GHO文件怎么恢复到新硬盘?

前言 之前咱们说到用WinPE系统给电脑做一个GHO镜像备份&#xff0c;这个备份可以用于硬盘完全崩溃换盘的情况下使用。 那么这个GHO镜像文件怎么用呢&#xff1f; 咱们今天详细来讲讲&#xff01; 如果你的电脑系统硬盘崩溃了或者是坏掉了&#xff0c;那么就需要使用之前备份…

华为机考入门python3--(20)牛客20- 密码验证合格程序

分类&#xff1a;字符串 知识点&#xff1a; 遍历字符串的每个字符 for char in my_str: 可以直接比较字符范围 a < char < z 列表统计元素个数 my_list.count(elem) 寻找子串 my_str.find(sub_str) 题目来自【牛客】 import re import sysdef check_…

【算法】唯一分解定理及最lcm和gcd关系 宝石组合

前言 今天在做一道宝石组合的题目时了解到了这个定理&#xff0c;还是蛮有意思的。 思想 唯一分解定理&#xff1a; 对于任何正整数n&#xff0c;有 n p 1 a 1 p 2 a 2 . . . p k a k n p_1^{a1} \times p_2^{a2} \times ... \times p_k^{ak} np1a1​p2a2​...pkak​ …

C语言零基础快速入门视频教程

C语言零基础快速入门视频教程 介绍C语言C语言零基础视频教程领取教程下期更新预报 介绍C语言 C语言零基础快速入门&#xff1a;探索C语言的起源、特性与魅力 在编程世界中&#xff0c;C语言犹如一座古老而坚实的桥梁&#xff0c;连接着计算机科学的过去与现在。作为一门历史悠…

家庭用水安全新举措:保障自来水管和储水设施卫生

随着公众对家庭用水安全意识的提高&#xff0c;如何确保自来水管和楼顶储水罐的安全性和卫生已成为家庭生活中的重要议题。近期&#xff0c;专家针对此问题提出了一系列实用的注意事项和建议。 注意事项&#xff1a; 定期检查&#xff1a;专家强调&#xff0c;家庭应每季度至…

分布式事务—> seata

分布式事务之Seata 一、什么是分布式事务&#xff1f; 分布式事务是一种特殊类型的事务&#xff0c;它涉及多个分布式系统中的节点&#xff0c;包括事务的参与者、支持事务的服务器、资源服务器以及事务管理器。 在分布式事务中&#xff0c;一次大型操作通常由多个小操作组成…

如何查公网IP?

在网络通信中&#xff0c;每个设备都被分配一个独特的IP地址&#xff0c;用于在Internet上进行标识和通信。公网IP是指可以直接从Internet上访问的IP地址&#xff0c;也称为全局IP。通过查公网IP&#xff0c;我们可以了解我们的设备在Internet上的位置和连接状态。 2. 查公网IP…

vue3使用echarts做树图tree

vue3使用echarts做树图tree 1.安装echarts npm install echarts --save2.在main.js引入 import * as echarts from echarts // 全局方法 app.config.globalProperties.$echarts echarts3.使用 <div id"myChart" :style"{ width: 1000px, height: 1000px …

Django后台项目开发实战五

完成两个功能&#xff1a; HR 可以维护候选人信息面试官可以录入面试反馈 第五阶段 创建 interview 应用&#xff0c;实现候选人面试评估表的增删改功能&#xff0c;并且按照页面分组来展示不同的内容&#xff0c;如候选人基础信息&#xff0c;一面&#xff0c;二面的面试结…

[Linux][网络][传输层][UDP]详细讲解

目录 0.预备知识1.端口号的划分范围2.认识知名端口号3.netstat命令4.pidof 1.UDP协议端格式2.UDP特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 0.预备知识 1.端口号的划分范围 端口号的长度是16位&#xff0c;因此端口号的范围是0 ~ 65535 0 ~ 1023…

构建智能化商旅服务:酒店中台云服务架构设计与实践

随着商旅行业的不断发展和智能化趋势的兴起&#xff0c;酒店中台云服务成为了提升服务质量和效率的关键。本文将探讨酒店商旅中台云服务的架构设计与实现&#xff0c;介绍其关键特点和最佳实践&#xff0c;助力商旅行业迈向智能化未来。 1. **需求分析与场景设计&#xff1a;*…

ssm101珠宝首饰交易平台开发+jsp

珠宝首饰交易平台 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于珠宝首饰交易平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了珠宝首饰交易平台&#x…

开源博客项目Blog .NET Core源码学习(20:App.Hosting项目结构分析-8)

本文学习并分析App.Hosting项目中后台管理页面的个人资料页面、修改密码页面。 个人资料页面 个人资料页面用于显示和编辑个人信息&#xff0c;支持从本地上传个人头像。整个页面使用了layui中的表单、日期与时间选择、上传等样式或模块&#xff0c;通过layui.css文件设置样式…

Jenkins流水线部署springboot项目

文章目录 Jenkins流水线任务介绍Jenkins流水线任务构建Jenkins流水线任务Groovy脚本Jenkinsfile实现 Jenkins流水线任务实现参数化构建拉取Git代码构建代码制作自定义镜像并发布 Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目&#xff0c;每个步骤流程都要通过不…