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 accanto ad esso. Una rotazione del cerchio migra solo il puntatore (Numero di nodi / Numero di facce) -1 nodi sopra, in questo caso 2. Poiché tutte le rotazioni sono rotazioni di cerchi, è sufficiente creare una rotate
funzione. È ricorsivo, sposta ogni nodo di uno spazio e controlla se li ha spostati abbastanza, poiché avrà raccolto il numero di nodi e ci sono sempre quattro facce. In caso contrario, incrementa il numero di volte in cui il valore è stato spostato e la chiamata ruota di nuovo.
Non dimenticare che è doppiamente collegato, quindi aggiorna anche i nodi appena appuntiti. 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.
Dal momento che tutti i nodi puntano l'uno verso l'altro, basta andare in circolo aggiornando ciascun nodo man mano che ci si arriva.
Questo dovrebbe funzionare per qualsiasi cubo di dimensioni, senza casi limite o logica complessa. È solo una camminata / aggiornamento del puntatore.