#include <iostream>
#include <array>
#include <string>
using namespace std;
#define ROW 3
#define COL 3
// Allowed = 0
// Not Allowed = 1
//const int grid[ROW][COL] = {0};
array<array<int, ROW>, COL> grid = {{
{0,0,0},
{1,0,0},
{0,1,0}
}};
string to_str(const array<array<int, ROW>, COL>& g)
{
string res="";
for(int i=0; i<ROW; ++i)
{
for(int j=0; j<COL; ++j)
{
res += (j==0)?"":" " + to_string(g[i][j]);
}
res += "\n";
}
return res;
}
/**
* @brief Solving the maze requires finding only 1 path
* @note CONSTRAINTS
* 1) Bounds
* 2) Allowed Cells
* 3) Ending Condition
*/
string solve_maze(const array<array<int, ROW>, COL>& g, const unsigned int r, const unsigned int c, const string& s)
{
// Ending Condition
if((r==(ROW-1)) && (c==(COL-1))) return s;
// Only 2 steps possible: r+1 or c+1
// Check Bounds first and allowed second
if( ((r+1)<ROW) && (g[r+1][c] == 0) ) {auto res = solve_maze(g, r+1, c, s + (s==""?"":",") + "D"); if(res!="") return res;}
if( ((c+1)<COL) && (g[r][c+1] == 0) ) {auto res = solve_maze(g, r, c+1, s + (s==""?"":",") + "R"); if(res!="") return res;}
return "";
}
/**
* @brief Decorates the actual engine
*/
string solve_maze(const array<array<int, ROW>, COL>& g)
{
auto res = solve_maze(g, 0,0, "");
if (res=="") return "Impossibile to solve";
return res;
}
int main() {
// your code goes here
//cout << to_str(grid) << endl;
cout << solve_maze(grid) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFJPVyAzCiNkZWZpbmUgQ09MIDMKCgovLyBBbGxvd2VkID0gMCAKLy8gTm90IEFsbG93ZWQgPSAxCi8vY29uc3QgaW50IGdyaWRbUk9XXVtDT0xdID0gezB9OyAKCmFycmF5PGFycmF5PGludCwgUk9XPiwgQ09MPiBncmlkID0ge3sKCXswLDAsMH0sCgl7MSwwLDB9LCAKCXswLDEsMH0KfX07IAoKc3RyaW5nIHRvX3N0cihjb25zdCBhcnJheTxhcnJheTxpbnQsIFJPVz4sIENPTD4mIGcpCnsKCXN0cmluZyByZXM9IiI7IAoJZm9yKGludCBpPTA7IGk8Uk9XOyArK2kpCgl7CgkJZm9yKGludCBqPTA7IGo8Q09MOyArK2opCgkJewoJCQlyZXMgKz0gKGo9PTApPyIiOiIgIiArIHRvX3N0cmluZyhnW2ldW2pdKTsgCgkJfQoJCXJlcyArPSAiXG4iOyAKCX0KCXJldHVybiByZXM7IAp9CgoKCi8qKgogICogQGJyaWVmIFNvbHZpbmcgdGhlIG1hemUgcmVxdWlyZXMgZmluZGluZyBvbmx5IDEgcGF0aCAKICAqIEBub3RlIENPTlNUUkFJTlRTIAogICogMSkgQm91bmRzIAogICogMikgQWxsb3dlZCBDZWxscyAKICAqIDMpIEVuZGluZyBDb25kaXRpb24gCiAgKi8Kc3RyaW5nIHNvbHZlX21hemUoY29uc3QgYXJyYXk8YXJyYXk8aW50LCBST1c+LCBDT0w+JiBnLCBjb25zdCB1bnNpZ25lZCBpbnQgciwgY29uc3QgdW5zaWduZWQgaW50IGMsIGNvbnN0IHN0cmluZyYgcykKewoJLy8gRW5kaW5nIENvbmRpdGlvbiAKCWlmKChyPT0oUk9XLTEpKSAmJiAoYz09KENPTC0xKSkpIHJldHVybiBzOyAKCQoJLy8gT25seSAyIHN0ZXBzIHBvc3NpYmxlOiByKzEgb3IgYysxCgkvLyBDaGVjayBCb3VuZHMgZmlyc3QgYW5kIGFsbG93ZWQgc2Vjb25kIAoJaWYoICgocisxKTxST1cpICYmIChnW3IrMV1bY10gPT0gMCkgKSB7YXV0byByZXMgPSBzb2x2ZV9tYXplKGcsIHIrMSwgYywgcyArIChzPT0iIj8iIjoiLCIpICsgIkQiKTsgaWYocmVzIT0iIikgcmV0dXJuIHJlczt9IAoJaWYoICgoYysxKTxDT0wpICYmIChnW3JdW2MrMV0gPT0gMCkgKSB7YXV0byByZXMgPSBzb2x2ZV9tYXplKGcsIHIsIGMrMSwgcyArIChzPT0iIj8iIjoiLCIpICsgIlIiKTsgaWYocmVzIT0iIikgcmV0dXJuIHJlczt9IAoJcmV0dXJuICIiOyAKfQoKCi8qKgogICogQGJyaWVmIERlY29yYXRlcyB0aGUgYWN0dWFsIGVuZ2luZSAKICAqLwpzdHJpbmcgc29sdmVfbWF6ZShjb25zdCBhcnJheTxhcnJheTxpbnQsIFJPVz4sIENPTD4mIGcpCnsKCWF1dG8gcmVzID0gc29sdmVfbWF6ZShnLCAwLDAsICIiKTsgCglpZiAocmVzPT0iIikgcmV0dXJuICJJbXBvc3NpYmlsZSB0byBzb2x2ZSI7IAoJcmV0dXJuIHJlczsgCn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJLy9jb3V0IDw8IHRvX3N0cihncmlkKSA8PCBlbmRsOyAKCWNvdXQgPDwgc29sdmVfbWF6ZShncmlkKSA8PCBlbmRsOyAKCXJldHVybiAwOwp9