1

我有一个递归函数来生成矩阵,称为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的所有矩阵。aalight_col_permutations

使用代码中的基本情况,它只找到一个这样的矩阵并退出(returns)。

我怎样才能生成所有这些?

下面的代码是一个简化版,这样就可以看到递归的结构了。如果有任何不清楚的地方,请告诉我。(整个程序大约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);
}
4

0 回答 0