蓝桥杯第七届决赛JAVA真题----路径之谜

路径之谜

小明冒充X星球的骑士,进入了一个奇怪的城堡。
城堡里边什么都没有,只有方形石头铺成的地面。
假设城堡地面是 n x n 个方格。【如图1.png】所示。


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

输入:
第一行一个整数N(0<N<20),表示地面有 N x N 个方格
第二行N个整数,空格分开,表示北边的箭靶上的数字(自西向东)

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

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

为了方便表示,我们约定每个小格子用一个数字代表,从西北角开始编号: 0,1,2,3....
比如,图1.png中的方块编号为:
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

资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

思路:就是DFS,啥也没有,题干一如既往的长,唯一复杂的就是变量多了些。我们直接错(0,0)进行搜素,遍历每个结点,同时保证符合要求即可(注意每次col和row要往同一个方向进行)。看来是有必要认真梳理一下类似的题目了。

这样的搜素必然要有vis[][]记录是否遍历,必然要有dir[][]控制方向。     告诫自己:以后注意采用匈牙利命名法,类似iMax。

完整代码如下:

import java.util.Scanner;public class Main {static int n;static int[] row, col;static int rowSum;static int colSum;static int[][] print;//标定每个单元格的数字static int[] map;//记录打印顺序,长度为(rowSum+colSum)/2,即len的最终值static int len = 0;//记录路径的行进长度static int[][] vis;static int[][] dir = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();row = new int[n + 1];col = new int[n + 1];vis = new int[n + 1][n + 1];print = new int[n + 1][n + 1];map = new int[n*n + 1];int index = 0;for(int i=0; i<n; ++i) {for(int j=0; j<n; ++j) {print[i][j] = index++;}}for (int i = 0; i < n; i++) {row[i] = in.nextInt();rowSum += row[i];}for (int i = 0; i < n; i++) {col[i] = in.nextInt();colSum += col[i];}len = 1;vis[0][0] = 1;row[0]--;rowSum--;col[0]--;colSum--;map[0] = 0;f(0, 0);}private static void f(int x, int y) {// TODO Auto-generated method stubif (x == n - 1 && y == n - 1) {if (colSum == 0 && rowSum == 0) {for (int i = 0; i < len; i++) {System.out.print(map[i] + " ");}}}for (int i = 0; i < 4; i++) {int dx = x + dir[i][0];int dy = y + dir[i][1];if (dx >= 0 && dx < n && dy >= 0 && dy < n && vis[dx][dy] == 0 && row[dy] > 0 && col[dx] > 0) {
//				row和col要往同一个方向进行,即同时加减。vis[dx][dy] = 1;row[dy]--;rowSum--;col[dx]--;colSum--;map[len++] = print[dx][dy];f(dx, dy);len--;vis[dx][dy] = 0;row[dy]++;rowSum++;col[dx]++;colSum++;}}}
}  


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

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

相关文章

蓝桥杯第七届决赛JAVA真题----广场舞

广场舞LQ市的市民广场是一个多边形&#xff0c;广场上铺满了大理石的地板砖。 地板砖铺得方方正正&#xff0c;就像坐标轴纸一样。 以某四块砖相接的点为原点&#xff0c;地板砖的两条边为两个正方向&#xff0c;一块砖的边长为横纵坐标的单位长度&#xff0c;则所有横纵坐标都…

oracle的关键字

oracle使用管理员执行下面命令&#xff0c;就能获得oracle的关键字&#xff1a; select * from v$reserved_words order by keyword asc; 以下是oracle 11.2.0.1.0中执行的结果&#xff08;供参考&#xff09;&#xff1a; 转载于:https://www.cnblogs.com/zhaoqian49/p/104490…

poj1279

板子题&#xff0c;求多边形内核面积。 话说jls的板子返回的是边&#xff0c;然后我就在冥思苦想怎么根据割边求面积啊。。 然后发现自己果然是个傻逼&#xff0c;求一下交点存起来就好了。。。 //板子题到此为止了 1 #include <iostream>2 #include <cstdio>3 #in…

回溯法在解决八皇后问题中的应用

回溯法&#xff1a;有这样一类题目&#xff0c;它们要求在相对问题的输入规模按照指数速度增长&#xff08;或者更快&#xff09;的域中&#xff0c;找出一个具有指定特性的元素。例如&#xff1a;在图顶点的所有排列中求一个哈密顿回路&#xff0c;在背包问题的一个实例中求其…

python数据结构与算法之问题求解

懂得计算机的童鞋应该都知道&#xff0c;一条计算机程序由数据结构跟算法两大部分组成。所以&#xff0c;其实不管你使用哪种计算机语言编写程序&#xff0c;最终这两部分才是一个程序设计的核心。所以&#xff0c;一个不懂得数据结构与算法的程序员不是一个好工程师。因此&…

运用tp5上传图片,并生成缩略图

最近想做个相册&#xff0c;需要用到上传图像&#xff0c;并且考虑到性能问题&#xff0c;还要生成缩略图&#xff0c;就学习下。在网上看了很多大神写的文章&#xff0c;经过各种调试总算出来了&#xff0c;分享下。不好之处&#xff0c;多多指教 ​ ​ ps&#xff1a;运用tp5…

求解最长回文子串----Manacher 算法

最长回文子串问题&#xff1a;给定一个字符串&#xff0c;求它的最长回文子串长度。 如果一个字符串正着读和反着读是一样的&#xff0c;那么我们称之为回文串。例如&#xff1a;abba、aaaa、abvcba、123321等 暴力法&#xff1a;遍历字符串的所有子串&#xff0c;对每个字串进…

Peter's smokes -poj 2509

题意&#xff1a;彼得有n支雪茄&#xff0c;每k个烟头可以换一支新雪茄&#xff0c;问彼得最多可以吸多少支雪茄 &#xff1f; 当时自己做时&#xff0c;错在了直接在while循环开始前&#xff0c;便将雪茄的初始数量给加上了&#xff0c;然而应该是先处理后再加上最终剩余的雪茄…

模式匹配算法----KMP算法以及next数组的解法

KMP算法&#xff1a;求字符串匹配&#xff08;也叫模式匹配&#xff09;的算法&#xff0c;即给定一个字符串&#xff0c;求其某一子串在其中出现的位置。 普通模式匹配 例如&#xff1a;给定字符串为abcabaaabaabcac&#xff0c;求其子串abaabcac在其中出现的位置。 结果为…

Spring Boot使用layui的字体图标时无法正常显示 解决办法

在html文件使用字体图标并且预览时正常&#xff0c;但是启动工程后显示不正常&#xff0c;浏览器调试界面显示字体文件无法decode&#xff1a; Failed to decode downloaded font: xxxxx 如图所示&#xff1a; 显示结果&#xff1a; 原因&#xff1a;经过maven的filter&#xf…

蓝桥杯第七届国赛JAVA真题----机器人塔

机器人塔X星球的机器人表演拉拉队有两种服装&#xff0c;A和B。 他们这次表演的是搭机器人塔。 类似&#xff1a;队内的组塔规则是&#xff1a; A 只能站在 AA 或 BB 的肩上。B 只能站在 AB 或 BA 的肩上。你的任务是帮助拉拉队计算一下&#xff0c;在给定A与B的人数时&…

Python divmod() 函数

Python divmod() 函数 Python 内置函数 python divmod() 函数把除数和余数运算结果结合起来&#xff0c;返回一个包含商和余数的元组(a // b, a % b)。 在 python 2.3 版本之前不允许处理复数。 函数语法 divmod(a, b)参数说明&#xff1a; a: 数字b: 数字实例 >>>div…

蓝桥杯第六届省赛JAVA真题----垒骰子

垒骰子 赌圣atm晚年迷恋上了垒骰子&#xff0c;就是把骰子一个垒在另一个上边&#xff0c;不能歪歪扭扭&#xff0c;要垒成方柱体。 经过长期观察&#xff0c;atm 发现了稳定骰子的奥秘&#xff1a;有些数字的面贴着会互相排斥&#xff01; 我们先来规范一下骰子&#xff1a;1 …

并发队列、线程池、锁

1、CountDownLatch(计数器) CountDownLatch 类位于java.util.concurrent包下&#xff0c;利用它可以实现类似计数器的功能。比如有一个任务A&#xff0c;它要等待其他任务执行完毕之后才能执行&#xff0c;此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是…

蓝桥杯第七届省赛JAVA真题----剪邮票

剪邮票 如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来&#xff0c;要求必须是连着的。 &#xff08;仅仅连接一个角不算相连&#xff09; 比如&#xff0c;【图2.jpg】&#xff0c;【图3.jpg】中&#xff0c;粉红色所示部分就是合格的剪取。 请你…

目标检测之YOLO V2 V3

YOLO V2 YOLO V2是在YOLO的基础上&#xff0c;融合了其他一些网络结构的特性&#xff08;比如&#xff1a;Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷积核等&#xff09;&#xff0c;进行的升级。其目的是弥补YOLO的两个缺陷&#xff1a; YOLO中的大量的定位错误和基于区域…

蓝桥杯第八届省赛JAVA真题----迷宫

标题&#xff1a;迷宫 X星球的一处迷宫游乐场建在某个小山坡上。 它是由10x10相互连通的小房间组成的。 房间的地板上写着一个很大的字母。 我们假设玩家是面朝上坡的方向站立&#xff0c;则&#xff1a; L表示走到左边的房间&#xff0c; R表示走到右边的房间&#xff0…

掌握MySQL数据库这些优化技巧,事半功倍!

一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的&#xff0c;它是随着用户量的增加&#xff0c;基础架构才逐渐完善。这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案&#xff0c;暂且抛开前端应用不说&#xff0c;大致分为以下五个阶段&am…

蓝桥杯第八届省赛JAVA真题----方格分割

标题&#xff1a;方格分割 6x6的方格&#xff0c;沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。 如图&#xff1a;p1.png, p2.png, p3.png 就是可行的分割法。 试计算&#xff1a; 包括这3种分法在内&#xff0c;一共有多少种不同的分割方法。 注意&#xff…

Python猫荐书系列:文也深度学习,理也深度学习

最近出了两件大新闻&#xff0c;相信大家可能有所耳闻。 我来当个播报员&#xff0c;给大家转述一下&#xff1a; 1、中国队在第 11 界罗马尼亚数学大师赛&#xff08;RMM&#xff09;中无缘金牌。该项赛事是三大国际赛事之一&#xff0c;被誉为中学奥数的最高难度。其中一道题…