【蓝桥杯】试题 历届真题 穿越雷区【第六届】【决赛】【A组】
一道比较简单的dfs搜索题。本题的两个要点:一是A开始B结束,二是走的过程中+-交替。
具体的解题过程写在注释中了。
个人经验是把字符矩阵转换成数字矩阵在判断条件时会简单一些。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<math.h>
#include<set>
#include<string>
using namespace std;
int n;
int begini, beginj, endi, endj;//A,B的坐标
int ans = 99999;//记录最终的最小步数//初始化方阵,+为1,-为-1,A或B为0;同时记录A,B的坐标
void init(vector<vector<int> >&grid)
{for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){char ch;cin >> ch;if (ch == '+'){grid[i][j] = 1;}else if (ch == '-'){grid[i][j] = -1;}else if (ch == 'A'){grid[i][j] = 0;begini = i;beginj = j;}else if (ch == 'B'){grid[i][j] = 0;endi = i;endj = j;}}}
}
//i,j为方阵坐标,len为走了多少步,pre记录上一步是+还是-,used记录当前位置有没有走过一次
void dfs(int i,int j,int len,int pre,vector<vector<int> >&used, vector<vector<int> >& grid)
{if (i == endi && j == endj){ans = min(ans, len);return;}//当len>ans已经不可能是结果了,直接返回//经实测都可以通过。加上len>ans用时31ms,不加用时453msif (i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size()||used[i][j]==1||len>ans){return;}//if判断是否符合+-交替,pre==0是开始情况if (grid[i][j]+pre==0||pre==0){used[i][j] = 1;//进行四个方向的搜索dfs(i + 1, j, len + 1,grid[i][j], used, grid);dfs(i - 1, j, len + 1,grid[i][j], used, grid);dfs(i, j + 1, len + 1,grid[i][j], used, grid);dfs(i, j - 1, len + 1,grid[i][j], used, grid);used[i][j] = 0;}}
int main()
{cin >> n;vector<vector<int> >grid(n,vector<int>(n));init(grid);vector<vector<int> >used(n, vector<int>(n, 0));dfs(begini, beginj, 0, 0, used,grid);ans = ans == 99999 ? -1 : ans;cout << ans;return 0;
}
【蓝桥杯】试题 历届真题 穿越雷区【第六届】【决赛】【A组】相关推荐
- 【蓝桥杯】历届真题 魔方旋转问题(高职组) Java
问题描述 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方,如图: 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下: x轴正向:绿 x轴反向:蓝 y轴正向:红 y轴反向:橙 z轴正向 ...
- 【蓝桥杯国赛真题20】Scratch纸牌对对碰 青少年组 scratch蓝桥杯国赛真题和答案讲解
scratch纸牌对对碰 第十届蓝桥杯scratch编程国赛真题 一.题目要求 两两相同的一共四张如下的纸牌,每次先后翻开两张,如果两张一样就消失,如果两张不一样就重新扣下,当舞台上所有纸牌都消失,就 ...
- 【蓝桥杯】历届真题 天干地支(决赛)Java
[资源限制] 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s [问题描述] 古代中国使用天干地支来记录当前的年份. 天干 ...
- 【蓝桥杯】历届真题 杨辉三角形 (省赛)Java
[问题描述] 下面的图形是著名的杨辉三角形: 如果我们按从上到下.从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,... 给定一个正整数 ...
- 问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区
问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区 时间限制: 1Sec 内存限制: 128MB 提交: 310 解决: 211 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区 ...
- 【题解】【蓝桥杯】试题 历届真题 砝码称重【第十二届】【省赛】【B组】
题目链接 试题 历届真题 砝码称重[第十二届][省赛][B组] 题目描述 解题思路 暴力,两个map,分别存储当前能称出的重量和遍历时用于计算的重量 需要注意的三点是 abs函数是在math.h里面的 ...
- 3位水仙花数计算pythonoj_Python解答蓝桥杯省赛真题之从入门到真题
若发现此文章消失,则是在等待审核中,稍等一会儿即可显示,谢谢. 另外,我会尽量晚上上传更新题目. 此文章太长了,导致MD编辑器很卡,另写了一篇接续 传送门 Python解答蓝桥杯省赛真题之从入门到真题 ...
- 小唐开始刷蓝桥(二)2019年第十届C/C++ B组蓝桥杯省赛真题
文章目录 前言 一.组队 二.年号字符 三.数列求值 四.数的分解 五.迷宫 六.特别数的和 七.完全二叉树的权值 八.等差数列 九.后缀表达式 十.灵能传输 上一篇: 小唐开始刷蓝桥(一)2020年 ...
- 吃豆人游戏-第12届蓝桥杯Scratch选拔赛真题精选
[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第79讲. 蓝桥杯选拔赛每一届都要举行4~5次,和省赛.国赛相比,题目要简单不少,再加上篇幅 ...
最新文章
- MVC 4.0 Razor模板引擎 @Html.RenderPartial 与 @Html.RenderAction 区别
- mysql中设置字符集语句_mysql设置字符集
- main()与_tmain()区别
- BugKuCTF 加密 聪明的小羊
- 【Java操作】IDEA 导入Springboot 项目:
- 根目录下各文件夹的作用
- 吴恩达,确诊新冠阳性!
- 通过Android反编译技术研究国内陌生人社交即时通讯的技术方案
- linux使用rsync增量保存文件与无交互自动传输
- 全自动安装MySQL_自动部署安装mysql-5.6.22
- linux 检查文件更新,Linux系统文件系统优化及磁盘检查
- 答题小程序 服务器,开源的基于云开发的在线答题小程序
- 【单片机/嵌入式】最完整学习路线
- HDP 03.FreeIPA安装
- ice php 5.6.32,PHP通过ice调用python程序
- 《流浪地球》海报丨见证小破球24亿票房逆袭之路
- 蓄力-利用POI进行excel的导入导出(包含图片)
- KKT条件的物理意义(转)
- Windows系统禁止软件、驱动阻止系统息屏、睡眠。
- 04、pytest跳过测试用例
热门文章
- 移动平均(Moving Average)
- [C语言编程练习][05]输入水的夸脱数,显示水的分子数量
- 618高赞数码产品合集、数码产品种草清单
- 4.绘制统计图形——条形图
- Android所有小部件列表页面,伟大的Android时钟小部件列表,以帮助您了解时间 | MOS86...
- 使用tensorflow构建简单卷积神经网络
- Python对字典列表多维数组排序
- for循环与while循环
- 【开源教程26】疯壳·开源编队无人机-360 度翻滚
- 【知识图谱 Knowledge Graph】从它的起源看未来的研究方向。知识图谱——科普篇