我有一个递归函数来生成矩阵,称为lights
.
这个函数在light_and_color
.
light_col_permutation
,在 中调用lights
,给出一个向量的向量 int 的向量。
所以,在for(vector<vector<int> > aa:light_col_permutations(rowSums, colSums, colIndex))
代码中的循环中,aa
给出了一对向量。
aa[0]
是可以在 index 处进入矩阵行的可能值colIndex
。
aa[1]
rowSums
是可以填充的更新(剩余) ,对于 . 之后的未填充行colIndex
。这被递归地传入lights
,以填充下一列。
这个函数应该做的是找到每个in的所有矩阵。aa
light_col_permutations
使用代码中的基本情况,它只找到一个这样的矩阵并退出(return
s)。
我怎样才能生成所有这些?
下面的代码是一个简化版,这样就可以看到递归的结构了。如果有任何不清楚的地方,请告诉我。(整个程序大约800行,但如果需要我会发布)
void lights(vector<int>& rowSums, vector<int>& colSums, int colIndex, matrix_c mc) {
if(colIndex == mc.r) {
mc.print_matrix();
}
for(vector<vector<int> > aa:light_col_permutations(rowSums, colSums, colIndex)) {
mc.row_assign(colIndex, aa[0]);
mc.newRowSum = aa[1];
lights(mc.newRowSum, colSums, colIndex+1, mc);
}
}
void light_and_color(int r, int n, int color, string filename) {
matrix_c mc(r, n); //zero matrix of size (r) X (r)
//here I get rowSums and colSums, but I omitted them
lights(rowSums, colSums, 0, mc);
}