Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct point {
- int x, y, z;
- };
- void shuffle(vector<vector<vector<int>>> &cube, point &improper, bool &proper) {
- srand(5);
- if (proper)
- improper = randompoint(cube);
- int ax, ay, az;
- point opp;
- if (proper) {
- for (int i = 0; i < 3; i++)
- if (cube[i][improper.y][improper.z] == 1) {
- ax = i;
- break;
- }
- for (int i = 0; i < 3; i++)
- if (cube[improper.x][i][improper.z] == 1) {
- ay = i;
- break;
- }
- for (int i = 0; i < 3; i++)
- if (cube[improper.x][improper.y][i] == 1) {
- az = i;
- break;
- }
- }
- else {
- while (ax != improper.x)
- ax = rand() % 3;
- while (ay != improper.y)
- ay = rand() % 3;
- while (az != improper.z)
- az = rand() % 3;
- }
- opp.x = ax; opp.y = ay; opp.z = az;
- cube[improper.x][improper.y][improper.z]++;
- cube[improper.x][ay][az]++;
- cube[ax][improper.y][az]++;
- cube[ax][ay][improper.z]++;
- cube[ax][improper.y][improper.z]--;
- cube[improper.x][ay][improper.z]--;
- cube[improper.x][improper.y][az]--;
- cube[ax][ay][az]--;
- if (cube[ax][ay][az] == -1) {
- proper = false;
- improper.x = ax; improper.y = ay; improper.z = az;
- }
- else
- proper = true;
- }
- point randompoint(vector<vector<vector<int>>> cube) {
- srand(5);
- vector<point> list;
- for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)for (int k = 0; k < 3; k++)
- if (cube[i][j][k] == 1) {
- point t;
- t.x = i;
- t.y = j;
- t.z = k;
- list.push_back(t);
- }
- return list[rand() % list.size()];
- }
- int main()
- {
- vector<vector<vector<int>>> cube = { {{1,0,0},{0,1,0},{0,0,1}}, {{0,0,1},{1,0,0},{0,1,0}}, {{0,1,0},{0,0,1},{1,0,0}} };
- point improper; improper.x = improper.y = improper.z = 0;
- bool proper = true;
- while (rand() % 27 != 5 || !proper) {
- shuffle(cube, improper, proper);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement