+-
在C中顺序移动数组

我有一个矩阵,我试图通过将第一行向左移动n次直到其原始位置来“计数”,这时我将第二行向左移动一次,然后再次遍历整个第一行,一次移动第二行,依此类推,直到第二行到达其原始位置,这时第三行将移动一次,然后我们重新开始。

例如:

0 1 2     1 2 0     2 0 1     0 1 2     1 2 0     2 0 1   a few     0 1 2     1 2 0
0 1 2 ==> 0 1 2 ==> 0 1 2 ==> 1 2 0 ==> 1 2 0 ==> 1 2 0 ==> ==> ==> 0 1 2 ==> 0 1 2 ... ... ...
0 1 2     0 1 2     0 1 2     0 1 2     0 1 2     0 1 2    more     1 2 0     1 2 0

一直到达到所有可能的组合。在MxN矩阵中,这应该给我N ^ M个可能性。我正在使用的实际矩阵比该矩阵大得多,因此我尝试避免250个以上的嵌套循环。

我已经有了shift方法:

static inline void shift(uint8_t *row){ //a row from a 2D Array
  int a, temp;
  int b = sizeof(row);
  temp = row[0];
  for(a = 0; a < b; a++){
    channel[a] = channel[a+1];
  }
  channel[b] = temp;
}

任何帮助将不胜感激。

0
投票

您的shift()功能可以通过以下方式改进: