Qu'en est-il des nœuds et des pointeurs?
En supposant qu'il y ait toujours 6 faces et que 1 nœud représente 1 carré sur 1 face:
r , g , b
r , g , b
r , g , b
| | |
r , g , b - r , g , b
r , g , b - r , g , b
r , g , b - r , g , b
Un nœud a un pointeur sur chaque nœud à côté de lui. Une rotation de cercle ne fait que migrer le pointeur (Nombre de nœuds / Nombre de faces) -1 nœuds sur, dans ce cas 2. Comme toutes les rotations sont des rotations de cercle, vous ne créez qu'une seule rotate
fonction. Il est récursif, en déplaçant chaque nœud d'un espace et en vérifiant s'il les a suffisamment déplacés, car il aura collecté le nombre de nœuds et qu'il y a toujours quatre faces. Sinon, incrémentez le nombre de fois que la valeur a été déplacée et appelez à nouveau la rotation.
N'oubliez pas qu'il est doublement lié, alors mettez également à jour les nœuds nouvellement pointés. Il y aura toujours hauteur * largeur nombre de nœuds déplacés, avec un pointeur mis à jour par nœud, il devrait donc y avoir hauteur * largeur * 2 nombre de pointeurs mis à jour.
Étant donné que tous les nœuds se font face, il vous suffit de vous déplacer sur un cercle pour mettre à jour chaque nœud au fur et à mesure de votre progression.
Cela devrait fonctionner pour n'importe quel cube de taille, sans cas limite ni logique complexe. C'est juste une marche / mise à jour de pointeur.