RT,
int dx[] = {-1, 1, 0, 0, 0}, dy[] = {0, 0, -1, 1, 0};
// udlr
mt19937 mt;
vector<int> inv = {-1};
map<pair<int, int>, vector<int>> mem;
// TODO : fix bug
vector<int> dfsmap(pos now, pos man)
{
vector<int> ret = inv;
if (man.mapx != now.mapx || man.mapy != now.mapy)
for (int i = 0; i < 4; i++)
{
pos n = now;
n.mapx += dx[i];
n.mapy += dy[i];
pair<int, int> pii = make_pair(n.mapx, n.mapy);
if (whole[now.mapx][now.mapy] & (1 << (3 - i))) continue;
if (whole[n.mapx][n.mapy] & 16) continue; // 16 : visited
vector<int> tmp = inv;
if (mem[pii].empty())
{
whole[n.mapx][n.mapy] |= 16;
tmp.clear();
mem[pii] = tmp = dfsmap(n, man);
if (tmp != inv) tmp.insert(tmp.begin(), i);
whole[n.mapx][n.mapy] &= ~16;
}
else
{
tmp.clear();
tmp = mem[pii];
if(tmp != inv) tmp.insert(tmp.begin(), i);
}
if (ret == inv || tmp.size() < ret.size()) ret = tmp;
// Sleep(2);
}
else ret = {5};
return ret;
}
vector<int> dfs(pos now, pos man)
{
for(int i = 0; i < WLINE; i++)
{
for(int j = 0; j < WCOL; j++)
{
whole[i][j] &= ~16;
}
}
vector<int> ret;
whole[now.mapx][now.mapy] |= 16;
ret = dfsmap(now, man);
whole[now.mapx][now.mapy] &= ~16;
return ret;
}