以特殊顺序C++填充矩阵

  • 本文关键字:填充 C++ 顺序 c++
  • 更新时间 :
  • 英文 :


我想用特殊顺序的值填充 8 x 8 矩阵(见下面的示例(,但我不知道该怎么做。每个数字代表排序号:例如:矩阵中的#3是我要添加的测量值的第三个值。 该顺序应为:

1   2   5   6    17  18  21  22
3   4   7   8    19  20  23  24
9   10  13  14   25  26  29  30
11  12  15  16   27  28  31  32
33  34  37  38   49  50  53  54
35  36  39  40   51  52  55  56
41  42  45  46   57  58  61  62  
43  44  47  48   59  60  63  64

有人知道算法来做到这一点吗? 我已经尝试过了,但这不是一个好方法,而且它不适用于整个矩阵

int b= 0, ii = 0, a = 0, iii = 0

i are different measurement values
and now a for loop  

if (ii == 1)
{
b++;
}
if (ii == 2)
{
a++, b--;
}
if (ii == 3)
{
b ++;
}
tempMatrix[a][b] = i;
cout << "TempMatrix " << tempMatrix[a][b] << "   a " << a << "  b " << b << endl;
if (ii == 3)
{
ii = -1;
a --;
b ++;
}
if (iii == 7)
{
a = a + 2;
b = 0;
iii = -1;
}

使用递归:

#include <iostream>
using namespace std;
void f(int a[8][8], int current, int x, int y, int size) {
if (size == 1) {
a[x][y] = current;
return;
} else {
size /= 2;
int add_for_each_square = size * size;
f(a, current, x, y, size);
f(a, current + add_for_each_square, x, y + size, size);
f(a, current + 2 * add_for_each_square, x + size, y, size);
f(a, current + 3 * add_for_each_square, x + size, y + size, size);
}
}
int main() {
int a[8][8];
f(a, 1, 0, 0, 8);
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
cout << a[i][j] << " ";
}
cout << endl;
}
}

如果矩阵始终是固定大小,则可以为矩阵中的行索引和列索引生成两个查找表。然后,只需通过这些表传递索引即可在矩阵中获得所需的位置。

const auto MATRIX_SIZE = 8;
const std::array<int, MATRIX_SIZE*MATRIX_SIZE> row_lookup = {{...}}; //put pre-computed values here. 
const std::array<int, MATRIX_SIZE*MATRIX_SIZE> col_lookup = {{...}};
for(size_t i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++)
{
auto val = get_coefficient(i);
auto row = row_lookup[i];
auto col = col_lookup[i];
mat[col][row] = val;
}

最新更新