找不到“生成”矩阵的递归函数的正确基本情况?

时间:2013-07-11 17:50:34

标签: c++ algorithm recursion matrix generator

我有一个递归函数来生成矩阵,称为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);
}

0 个答案:

没有答案