问题:

真人版密室逃脱游戏风靡全球,不仅在麻瓜世界广受欢迎,而且在魔法世界也十分流行。考虑到魔法世界的人们会使用能够瞬间移动的魔法,密室逃脱游戏在被引进魔法世界时作了一些修改:“密室迷宫”由排成n行m列的nm间房间组成,每间房间会被标记为“危险的”或者“安全的”,参加者在左上角的房间中开始游戏,通过使用红绿蓝三种不同的魔法在房间迷阵中移动(只能移动到“安全的”房间,不能移动到“危险的”房间),最后到达右下角的房间即获得胜利。三种不同魔法的效果如下:
  “红魔法”(r):瞬间移动到所在房间右边的第二间房;
  “绿魔法”(g):瞬间移动到所在房间右下方的房间;
  “蓝魔法”(b):瞬间移动到所在房间下方的第三间房;
  魔法师小L最近也迷上了这款游戏,他在游戏开始前拿到了房间地图(“安全的”房间用1标记,“危险的”房间用0标记),并被告知只能使用a次红魔法,b次绿魔法和c次蓝魔法(数据保证n=1+b+3*c;m=1+b+2*a),那么请聪明的你告诉小L,他能不能胜利?如果可以,该怎么使用魔法才能安全的到达右下角的房间?

输入格式

  输入第一行为五个整数n、m、a、b、c,用空格隔开;
  第二行到第n+1行每行m个整数(0或1),表示房间地图(数据保证地图左上角和右下角的整数为1)

输出格式

  若小L不能够到达终点,则输出-1;
  若小L能够到达终点,则输出字典序最大的使用的魔法序列(用r、g、b表示,不用空格空行)。

样例输入

12 9 3 2 3
1 1 1 1 1 0 0 1 1
0 1 1 0 0 1 1 1 1
1 1 1 1 1 0 0 0 1
1 0 1 1 0 1 1 0 1
1 1 1 1 1 0 1 1 0
1 1 1 1 1 1 0 1 1
0 1 1 0 0 1 1 1 0
0 0 0 0 1 0 1 1 1
0 1 1 1 1 1 1 1 1
1 1 0 0 1 1 0 1 1
1 1 1 1 1 1 0 1 0
0 1 1 1 1 1 0 1 1

样例输出

rrgrgbbb

数据规模和约定

  1≤n,m≤1000

代码:

#include<stdio.h>
#define max 1010        //定义数据最大限度//
typedef struct node
{int value;       //迷宫的单元// int Flag;        //记录该点是否走过//
} Node;
int n,m,flag=0,path=0;        //n是长,m是宽,flag判断是否走过了终点,path记录走过的步数//
Node a[max][max];             //定义迷宫数组//
char b[max];                  //记录走的路程//
int tx[3]= {0,1,3}; //移动的坐标//
int ty[3]= {2,1,0};
char str[3]= {'r','g','b'};  //题目要求的三个方向和tx与ty对应//
int x[3];                  //三个方向最大移动的次数//
int dfs(int i,int j)
{if(i==n&&j==m)         //先判断是不是到了终点// {flag=1;return true;}if(x[0]<0||x[1]<0||x[2]<0)           //判断是否超了最大移动次数// {return false;}if(i>n||j>m)                //是否越界,也算是剪枝的一种// {return false;}if(a[i][j].Flag==1)           //判断该点是否走过// {return false;}a[i][j].Flag=1;              //一旦进来并且没有访问过,那就将该点标记为访问// int Tx,Ty,l;                //Tx为横移,Ty为竖移// path++;                    //path记录步数// for(l=0; l<=2; l++)         {Tx=i+tx[l];Ty=j+ty[l];if(a[Tx][Ty].value==1&&a[Tx][Ty].Flag==0)        //判断下一步是否可以移动// {b[path]=str[l];                           //进来代表可以,所以把该步赋值给b// x[l]--;                                  //然后将这步减一// if(dfs(Tx,Ty)==true)                    //如果该点可以走完那就返回true// {return true;}x[l]++;                               //如果该点行不通返回赋的其他所有值,并且返回false// }}a[i][j].Flag=0;path--;return false;
}
int main()
{scanf("%d%d",&n,&m);for(int p=0; p<=2; p++){scanf("%d",&x[p]);}for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){scanf("%d",&a[i][j].value);a[i][j].Flag=0;}}dfs(1,1);if(flag==1){for(int k=1; k<=path; k++){printf("%c",b[k]);}}else{printf("-1");}return 0;
}

DFS+回溯 求解 密室逃脱(蓝桥杯,迷宫问题)超级详细相关推荐

  1. 蓝桥杯-迷宫(DFS)

    蓝桥杯-迷宫(DFS) 题目描述 X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10 \times 1010×10 相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡 ...

  2. 2017 蓝桥杯 迷宫(dfs)

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

  3. 蓝桥杯-迷宫(17年)-python

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10×10 相互连通的小房间组成的. 房间的地板上写着一个很大的字 ...

  4. 蓝桥杯迷宫 python实现

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10 \times 1010×10 相互连通的小房间组成的. 房间 ...

  5. Java实现第八届蓝桥杯迷宫

    迷宫 题目描述 X星球的一处迷宫游乐场建在某个小山坡上. 它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母. 我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间, R ...

  6. 【蓝桥杯 迷宫 2019省赛javaA组】BFS解法该死的Excel竟如此甜美

    试题 D: 迷宫 本题总分:10 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方. 010000 000100 001001 110000 迷宫 ...

  7. 蓝桥杯 迷宫与陷阱 BFS

    参考代码: #include<bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef long long ll ...

  8. 蓝桥杯 | 扑克排序(详细解析)

    一.题目描述 问题描述 扑克牌排序:构造扑克牌数组,对扑克牌进行排序. 排序原则如下: 数字从小到大是 2-10.J.Q.K 和 A, 花色从小到大是方块(diamond).梅花(club).红桃(h ...

  9. 2020第十一届蓝桥杯 平面切分 最详细题解

    题目描述 平面上有N 条直线,其中第i条直线是y = Ai x+Bi 请计算这些直线将平面分成了几个部分. [输入格式] 输入的第一行包含一个整数N, 以下N行,包含两个证书 Ai,Bi [输出格式] ...

最新文章

  1. Leetcode 268. 缺失数字 解题思路及C++实现
  2. sts(eclipse)安装svn插件
  3. Java中三种交换值得方式
  4. 关于清空object对象里的属性的两种方法
  5. Web框架——Flask系列之json、jsonify模块的使用(十四)
  6. Linux虚拟网络设备之tun/tap
  7. 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)
  8. 以下关于c语言中static和const,c语言中static const作用
  9. 配置 Logback 异步 Appender 时注意顺序
  10. power bi 雷达图_【自助式数据分析平台——WonderBI(豌豆BI)】免费在线试用_软件库...
  11. linux第一课历史与未来方向
  12. 实现Promise的resolve/reject/then/all/race/finally/catch方法
  13. 期货十三篇 第一篇 警示篇
  14. 蓝桥杯——鲁卡斯队列
  15. 金融远期合约与金融期货合约
  16. 屏蔽html查看源代码,禁止查看网页源代码方法
  17. Maixpy K210图像识别(仅自学笔记)
  18. ICC2 user guide(三)Clock Tree Synthesis
  19. 记一次实验报告:基于Linux的中小型企业网络架构
  20. java ssh免密登录_SSH免密登录(单信)

热门文章

  1. 微信云控拉群的源码的核心实现,及不容易死号
  2. 关于调查大学生日常零用钱使用情况
  3. MPV房产通证(Master Property Value)是什么?
  4. MySQL数据库常用操作(20221211)
  5. SDK Manager.exe打不开 闪退 的解决方法 win11下搭建android sdk
  6. jBPM jPDL 用户开发手册 3.2.3 - 第10章
  7. Dota英雄手册V6.79C更新
  8. 第一次写BP神经网络,求指点【哭脸】
  9. activiti 获取审批人员_activiti6.0 获得下一个审批人
  10. SAP 全球五大咨询公司