骑自行车穿过一些数字

时间:2013-11-16 17:37:50

标签: c

我在这里发布了一个关于魔方的问题(你不需要阅读):A simple console Rubik's cube in C (No need to solve, only design)

基本上,我只需要帮助,所以我可以在我的魔方计划中实现这一点。假设,左边有4个数字,例如[1,2,3,4]推送,现在变为[4,1,2,3]。如果我再次推送它,它应该变为[3,4,1,2]

基本上,我想要实现的是在立方体上旋转一行。我的旋转功能是这样的(我还在改变它,因为这不能很好地工作):

void swapRow(int row)
{
    int placeHolder[3];  //Consider it as a 'blank' row
        for(int j=0; j<3; j++)
            placeHolder[j] = cube[front][row][j];  

        for(int j=0; j<3; j++)
            cube[front][row][j] = cube[front+1][row][j]; 

        for(int j=0; j<3; j++)
            cube[front-1][row][j] = placeHolder[j]; 

}

这是我的立方体阵列:

int cube[6][3][3] = {{{1,1,1},{1,1,1},{1,1,1}}, 
             {{2,2,2},{2,2,2},{2,2,2}}, 
             {{3,3,3},{3,3,3},{3,3,3}},
             {{4,4,4},{4,4,4},{4,4,4}},
             {{5,5,5},{5,5,5},{5,5,5}},
             {{6,6,6},{6,6,6},{6,6,6}}};

front是一个变量并且是1.这就是问题所在,如果我一次又一次地交换,它会转到4,然后是5,然后是6等等我希望它转到4 ,然后是1,然后是2,然后是3,然后是4,然后再是1,因为它有多少边(不考虑顶部和底部)。

您认为我怎么能做到这一点?我使用的是C,而不是C ++。我将添加所需的任何其他信息。 :)

1 个答案:

答案 0 :(得分:1)

建议使用像:

这样的旋转器对象
typedef struct
{
  int *values;
  int mod;
  int size; //if you want to generalize the rubiks..
}rotator;

void rotate(rotator *rotator)
{
  rotator->mod = (rotator->mod + 1) % rotator->size;
}

void print_rotator(rotator *rotator)
{
  int index;
  fprintf(stdout, "[");
  for(index = 0; index < rotator->size; ++index)
  {
    fprintf(stdout, "%d,", rotator->values[(index + rotator->mod) % rotator->size]);
  }
  fprintf(stdout, "]\n");
}

然后你可以考虑如何将它构建成一个n-ary立方体..