我有一个递归函数来生成矩阵,称为lights
。
此功能在light_and_color
。
light_col_permutation
中调用的 lights
给出了矢量为int的矢量向量。
因此,在代码的循环for(vector<vector<int> > aa:light_col_permutations(rowSums, colSums, colIndex))
中,aa
给出了一对向量。
aa[0]
是可以在索引colIndex
处进入矩阵行的可能值。
aa[1]
是rowSums
之后未填充的行可以填写的更新(剩余)colIndex
。这将递归传递到lights
,以填写下一列。
此功能应该为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);
}