思维题,一开始想简单了。
正方体一共三种变换方式,一种变换四次就回到了原样,所以直接三重循环,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();
}
}
浙公网安备 33010602011771号