思维题,一开始想简单了。

正方体一共三种变换方式,一种变换四次就回到了原样,所以直接三重循环,O(4 ^ 3)。



#include<string>
#include<iostream>
using namespace std;

string orgin_cube, change_cube;

void vertical_cube(){
        char temp = orgin_cube[1];
        orgin_cube[1] = orgin_cube[3];
        orgin_cube[3] = orgin_cube[4];
        orgin_cube[4] = orgin_cube[2];
        orgin_cube[2] = temp;
}

void side_cube(){
    char temp = orgin_cube[0];
    orgin_cube[0] = orgin_cube[4];
    orgin_cube[4] = orgin_cube[5];
    orgin_cube[5] = orgin_cube[1];
    orgin_cube[1] = temp;
}

void front_cube(){
    char temp = orgin_cube[0];
    orgin_cube[0] = orgin_cube[2];
    orgin_cube[2] = orgin_cube[5];
    orgin_cube[5] = orgin_cube[3];
    orgin_cube[3] = temp;
}

int main(){
    while(cin >> orgin_cube){
        bool same_cube = false;

        change_cube.assign(orgin_cube, 6, 6);
        orgin_cube.erase(6);

        for(int i = 1; i <= 4; i++){
            front_cube();
            if(change_cube == orgin_cube){
                    same_cube = true;
                    break;
            }

            for(int j = 1; j <= 4; j++){
                side_cube();
                if(change_cube == orgin_cube){
                    same_cube = true;
                    break;
                }

                for(int k = 1; k <= 4; k++){
                    vertical_cube();
                    if(change_cube == orgin_cube){
                        same_cube = true;
                        break;
                    }
                }

                if(same_cube)
                    break;
            }

            if(same_cube)
                break;
        }

        if(same_cube)
            cout << "TRUE" << endl;
        else
            cout << "FALSE" << endl;

        orgin_cube.clear();
        change_cube.clear();
    }
}