Eu cred ca se face cu backtracking pur!!(ma rog nu chiar atat de pur doar foarte putine optimizari).
Fiecare pozitie se renumeroteaza cu 0..24 cu formula (i - 1) * 5 + j.
Dupa care aplici algoritmu de generare a combinarilor(unul destul de eficient gasesti si in manualu de Tudor Sorin!!) pentru fiecare pozitie i cu 0 <= i < 25(desi ai putea sa te opresti pe la 19) si numeri solutiile.Mai ramane sa faci o functie destul de eficienta care sa-ti evalueze daca ai ajuns la o solutie valida.Cam la partea asta am bushit eu in concurs(am considerat ca o pozitia curenta din stiva trebuie sa fie legata de o pozitie care se afla mai jos de ea in stiva - programu meu nu prindea cazuri in care solutia avea forma literei "U") si am pierdut o groaza de teste.
Am inteles ca se poate gasi o solutie si mai eficienta(o programare dinamica) dar inca mai ma chinui sa fac o implementare eficienta.Poate imi dati voi vreo idee!!pls!