问题:
真人版密室逃脱游戏风靡全球,不仅在麻瓜世界广受欢迎,而且在魔法世界也十分流行。考虑到魔法世界的人们会使用能够瞬间移动的魔法,密室逃脱游戏在被引进魔法世界时作了一些修改:“密室迷宫”由排成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#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]