一道比较简单的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组】相关推荐

  1. 【蓝桥杯】历届真题 魔方旋转问题(高职组) Java

    问题描述 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方,如图: 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下: x轴正向:绿 x轴反向:蓝 y轴正向:红 y轴反向:橙 z轴正向 ...

  2. 【蓝桥杯国赛真题20】Scratch纸牌对对碰 青少年组 scratch蓝桥杯国赛真题和答案讲解

    scratch纸牌对对碰 第十届蓝桥杯scratch编程国赛真题 一.题目要求 两两相同的一共四张如下的纸牌,每次先后翻开两张,如果两张一样就消失,如果两张不一样就重新扣下,当舞台上所有纸牌都消失,就 ...

  3. 【蓝桥杯】历届真题 天干地支(决赛)Java

    [资源限制] 内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s [问题描述] 古代中国使用天干地支来记录当前的年份. 天干 ...

  4. 【蓝桥杯】历届真题 杨辉三角形 (省赛)Java

    [问题描述] 下面的图形是著名的杨辉三角形: 如果我们按从上到下.从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,... 给定一个正整数 ...

  5. 问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区

    问题 1825: [蓝桥杯][2015年第六届真题]穿越雷区 时间限制: 1Sec 内存限制: 128MB 提交: 310 解决: 211 题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区 ...

  6. 【题解】【蓝桥杯】试题 历届真题 砝码称重【第十二届】【省赛】【B组】

    题目链接 试题 历届真题 砝码称重[第十二届][省赛][B组] 题目描述 解题思路 暴力,两个map,分别存储当前能称出的重量和遍历时用于计算的重量 需要注意的三点是 abs函数是在math.h里面的 ...

  7. 3位水仙花数计算pythonoj_Python解答蓝桥杯省赛真题之从入门到真题

    若发现此文章消失,则是在等待审核中,稍等一会儿即可显示,谢谢. 另外,我会尽量晚上上传更新题目. 此文章太长了,导致MD编辑器很卡,另写了一篇接续 传送门 Python解答蓝桥杯省赛真题之从入门到真题 ...

  8. 小唐开始刷蓝桥(二)2019年第十届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.组队 二.年号字符 三.数列求值 四.数的分解 五.迷宫 六.特别数的和 七.完全二叉树的权值 八.等差数列 九.后缀表达式 十.灵能传输 上一篇: 小唐开始刷蓝桥(一)2020年 ...

  9. 吃豆人游戏-第12届蓝桥杯Scratch选拔赛真题精选

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第79讲. 蓝桥杯选拔赛每一届都要举行4~5次,和省赛.国赛相比,题目要简单不少,再加上篇幅 ...

最新文章

  1. MVC 4.0 Razor模板引擎 @Html.RenderPartial 与 @Html.RenderAction 区别
  2. mysql中设置字符集语句_mysql设置字符集
  3. main()与_tmain()区别
  4. BugKuCTF 加密 聪明的小羊
  5. 【Java操作】IDEA 导入Springboot 项目:
  6. 根目录下各文件夹的作用
  7. 吴恩达,确诊新冠阳性!
  8. 通过Android反编译技术研究国内陌生人社交即时通讯的技术方案
  9. linux使用rsync增量保存文件与无交互自动传输
  10. 全自动安装MySQL_自动部署安装mysql-5.6.22
  11. linux 检查文件更新,Linux系统文件系统优化及磁盘检查
  12. 答题小程序 服务器,开源的基于云开发的在线答题小程序
  13. 【单片机/嵌入式】最完整学习路线
  14. HDP 03.FreeIPA安装
  15. ice php 5.6.32,PHP通过ice调用python程序
  16. 《流浪地球》海报丨见证小破球24亿票房逆袭之路
  17. 蓄力-利用POI进行excel的导入导出(包含图片)
  18. KKT条件的物理意义(转)
  19. Windows系统禁止软件、驱动阻止系统息屏、睡眠。
  20. 04、pytest跳过测试用例

热门文章

  1. 移动平均(Moving Average)
  2. [C语言编程练习][05]输入水的夸脱数,显示水的分子数量
  3. 618高赞数码产品合集、数码产品种草清单
  4. 4.绘制统计图形——条形图
  5. Android所有小部件列表页面,伟大的Android时钟小部件列表,以帮助您了解时间 | MOS86...
  6. 使用tensorflow构建简单卷积神经网络
  7. Python对字典列表多维数组排序
  8. for循环与while循环
  9. 【开源教程26】疯壳·开源编队无人机-360 度翻滚
  10. 【知识图谱 Knowledge Graph】从它的起源看未来的研究方向。知识图谱——科普篇