A co z węzłami i wskaźnikami?
Zakładając, że zawsze jest 6 twarzy, a ten 1 węzeł reprezentuje 1 kwadrat na 1 twarzy:
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
Węzeł ma wskaźnik do każdego węzła obok niego. Obrót koła migruje wskaźnik (Liczba węzłów / Liczba ścian) -1 węzłów, w tym przypadku 2. Ponieważ wszystkie obroty są obrotami kół, wystarczy zbudować jedną rotate
funkcję. Jest rekurencyjny, przesuwając każdy węzeł o jedno miejsce i sprawdzając, czy przesunął je wystarczająco, ponieważ zgromadzi liczbę węzłów i zawsze są cztery twarze. Jeśli nie, zwiększ liczbę przeniesionych wartości i ponownie obróć połączenie.
Nie zapomnij, że jest podwójnie powiązany, więc zaktualizuj również nowo wskazane węzły. Zawsze będzie się przesuwać Wysokość * Szerokość liczby węzłów, z jednym wskaźnikiem aktualizowanym na węzeł, więc powinna być zaktualizowana Wysokość * Szerokość * 2 liczba wskaźników.
Ponieważ wszystkie węzły wskazują na siebie, po prostu chodź w kółko, aktualizując każdy węzeł, gdy do niego dojdziesz.
Powinno to działać dla dowolnej wielkości kostki, bez przypadków krawędziowych i skomplikowanej logiki. To tylko wskaźnik chodzenia / aktualizacji.