Come ho detto in un commento, un modo possibile per risolvere questo è quello di tessere un percorso di ritorno & avanti attraverso una faccia usando 2 matite. Una matita disegna l'inizio del percorso e l'altra disegna la fine.
Ecco un esempio per una faccia:
+----------------+
|abcdefghijklmnop|
|ZYXWVUTSRQPONMLq|
|****ABCDEFGHIJKr|
|*###3210zyxwvuts|
|*###############|
|***************#|
|***************#|
|*###############|
|*###############|
|***************#|
|***************#|
|*###############|
|*###############|
|***************#|
|***************#|
|*###############|
+----------------+
Una matita inizia nella riga superiore, nella colonna sinistra, "abcd ..."
L'altra matita inizia nella seconda riga, nella colonna di sinistra, "ZYXWV ..."
Come puoi vedere, entrambi i percorsi terminano nella colonna di sinistra, in basso nelle 2 righe. A quel punto ti sposti alla prossima faccia & ripeti il processo.
Quando hai finito devi seguire percorsi "paralleli". Basta unire le estremità e amp; hai il tuo loop che visita ogni nodo.
una limitazione
Funziona solo perché il numero di righe (o colonne) è un multiplo di 2. Se la tua griglia era di 15x15x15, avresti un problema.