Hola:
Sobre mi solución, la idea que tenía era marcar cada celda visitada para no volver a pasar por la misma (inicialmente con valor 0 = camino no-visitado), de tal modo que desde la última posición del ratón, chequear todas las direcciones posibles {[N|S|E|O] - inversa(dir-actual)} y con las celdas con un valor = 0 (no visitada) generan una nueva "ruta posible".
Por cada paso, entonces, se mantienen los viejos senderos y se adicionan algunos con un paso más, que serán los que perduren (con la función "aligernado()", se eliminan todos los caminos con menos pasos dados)... es algo difícil de explicar...
Por cada paso nuevo se suman todos los posibles nuevos caminos, y se descartan todos los que se han topado con paredes o con cruces anteriormente visitados.
Los senderos están codificados con las iniciales de las direcciones que siguen: /^[N|S|O|E]$/ y se guardan simplemente cadenas de este tipo en un array que se trunca dejando solo las cadenas "completas"...
Espero haberme explicado "medianamente bien"...
Saludos