Che ne dici di nodi e puntatori?
Supponendo che ci siano sempre 6 facce e che 1 nodo rappresenti 1 quadrato su 1 faccia:
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 nodo ha un puntatore a ciascun nodo vicino ad esso. Una rotazione circolare migra solo il puntatore (Numero di nodi / Numero di facce) -1 nodi sopra, in questo caso 2. Poiché tutte le rotazioni sono rotazioni di cerchio, si crea solo una funzione rotate
. È ricorsivo, sposta ogni nodo di uno spazio e controlla se li ha spostati abbastanza, dal momento che avrà raccolto il numero di nodi e ci sono sempre quattro facce. In caso contrario, incrementa il numero di volte che il valore è stato spostato e chiama di nuovo a rotazione.
Non dimenticare che è doppiamente collegato, quindi aggiorna anche i nodi appena puntati. Ci sarà sempre Altezza * Larghezza numero di nodi spostati, con un puntatore aggiornato per nodo, quindi ci dovrebbe essere Altezza * Larghezza * 2 numero di puntatori aggiornati.
Poiché tutti i nodi puntano l'uno sull'altro, basta camminare sul cerchio aggiornando ogni nodo mentre ci si avvicina.
Questo dovrebbe funzionare per qualsiasi cubo di dimensioni, senza casi limite o logica complessa. È solo un puntatore a piedi / aggiornamento.