E nós e ponteiros?
Supondo que sempre haja 6 faces e que 1 nó represente 1 quadrado em 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
Um nó possui um ponteiro para cada nó próximo a ele. Uma rotação de círculo apenas migra o ponteiro (Número de nós / Número de faces) -1 nós, neste caso 2. Como todas as rotações são rotações de círculo, você apenas cria uma rotate
função. É recursivo, movendo cada nó um espaço e verificando se os moveu o suficiente, pois ele coletou o número de nós e sempre há quatro faces. Caso contrário, aumente o número de vezes que o valor foi movido e ligue novamente.
Não esqueça que ele é duplamente vinculado; portanto, atualize também os nós recém-apontados. Sempre haverá Altura * Número de nós movidos, com um ponteiro atualizado por nó; portanto, deve haver Altura * Largura * 2 número de ponteiros atualizados.
Como todos os nós apontam um para o outro, apenas circule atualizando cada nó à medida que você chega a ele.
Isso deve funcionar para qualquer cubo de tamanho, sem arestas ou lógica complexa. É apenas uma caminhada / atualização do ponteiro.