У меня есть матрица, которую я пытаюсь «посчитать», сдвигая первую строку влево n раз, пока она не окажется в исходном положении, и в этот момент я бы сдвинул второй ряд влево один раз, затем go снова через весь первый ряд, сдвиньте второй ряд один раз, и так далее, и так далее, пока второй ряд не будет в исходном положении, после чего третий ряд будет сдвигаться один раз, и мы начнем все сначала.
Например:
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+ вложенных циклов.
У меня уже есть метод сдвига:
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;
}
Любая помощь будет с благодарностью.