C中的矩阵问题

时间:2010-11-01 18:17:44

标签: c matrix permutation combinatorics

在具有k个对象的m×n矩阵中,对象放置在矩阵单元中的方式的数量是多少(k <= n,m)。通过给出一个更好的图示示例,如果“k”对象中的第一个对象放置在位置(1,1),则下一个对象不能放在第一列或第一行上,并且其余的剩余物体。

问题的输出如下:(第k个对象,第n行,第m列),即(3,3,4) 或者非正式地说,“k物体可以放置在(nxm)矩阵单元上的方式有多少种。

我发现了工作规则,说: [N(N-1)(N-2)...(N-(K-1))] [m个(m-1)(M-2)...(间 - (K-1))] - &GT;这将给出我确切的方式数量,k对象可以放置在单元格中,具有应用的约束。

但是我无法构造“嵌套for循环”条件:   对于(对象)      对于(行)         用于(列)

我正在使用C!

在构建代码时需要一些帮助!

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

正如我所说here,只需实施this

/* n,m,k are constants */
int rook() {
    int i, j, mem[m+1][k+1];
    for (i=0; i<=m; i++)
        mem[i][0] = 1;
    for (j=1; j<=k; j++)
        mem[0][j] = 0;
    for (i=1; i<=m; i++)
        for (j=1; j<=k; j++)
            mem[i][j] = mem[i-1][j] + (n-j+1)*mem[i-1][j-1];
    return mem[m][k];
}

像往常一样,您可以优化它以使用O(k)空间。