【发布时间】:2020-07-12 10:27:06
【问题描述】:
我有一个矩阵,我试图通过将第一行向左移动 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;
}
任何帮助将不胜感激。
【问题讨论】:
-
这行代码:
int b = sizeof(row);不正确。row是一个指针,你无法知道它的大小。您必须将行的大小作为单独的参数传递给函数。 -
@LucaPolito 尼特。可以知道
row的大小(它是指针的大小),但与行中元素的个数无关。 -
@WilliamPursell 是的,“指针的大小”我的意思是“指针指向的大小”。我认为前一个短语更“直接”。
标签: c arrays recursion multidimensional-array iteration