Bagaimana dengan node dan pointer?
Dengan asumsi selalu ada 6 wajah, dan 1 simpul mewakili 1 persegi pada 1 wajah:
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
Sebuah node memiliki pointer ke setiap node di sebelahnya. Rotasi lingkaran hanya memigrasikan pointer (Jumlah node / Jumlah wajah) -1 node lebih, dalam hal ini 2. Karena semua rotasi adalah rotasi lingkaran, Anda hanya membangun satu rotate
fungsi. Itu adalah rekursif, memindahkan setiap node satu spasi, dan memeriksa apakah itu telah memindahkan mereka cukup, karena akan mengumpulkan jumlah node, dan selalu ada empat wajah. Jika tidak, tambah beberapa kali nilai yang dipindahkan dan panggil putar lagi.
Jangan lupa itu ditautkan dua kali lipat, jadi perbarui juga simpul yang baru saja ditunjuk. Selalu ada Tinggi * Lebar jumlah node dipindahkan, dengan satu pointer diperbarui per node, sehingga harus ada Tinggi * Lebar * 2 jumlah pointer diperbarui.
Karena semua node menunjuk satu sama lain, hanya berjalan di lingkaran memperbarui setiap node saat Anda datang ke sana.
Ini harus bekerja untuk semua kubus ukuran, tanpa kasus tepi atau logika kompleks. Itu hanya penunjuk jalan / perbarui.