数组拼图:生成所有可能的组合

时间:2010-09-28 15:41:25

标签: c

我正在做一个项目,这部分对我很重要。我会尽量保持清醒。

假设我们有一个全0的mxn矩阵,我需要生成数组的所有可能组合,其中一行中只有一个元素初始化为1,而该行中的所有其他元素都是0。类似地,在所有行中,恰好一个元素应该是1. ex:采用3x2矩阵,以下应该是输出:

[1 0,1 0,1 0],[1 0,1 0,0 1],[1 0,0 1,1 0],[1 0,0 1,0 1],[0 1 ,1 0,1 0],[0 1,1 0,0 1],[0 1,0 1,1 0],[0 1,0 1,0]

方括号内的值是3x2矩阵,每行用逗号分隔。所以基本上,mxn矩阵将具有n个幂m组合。 任何想到解决这个问题的方法的人都会发布它,这非常重要。提前谢谢

1 个答案:

答案 0 :(得分:1)

由于这听起来像是家庭作业,我不打算给你一个完整的解决方案,而是朝着正确方向迈出的一些步骤。让我们从3x2矩阵开始。我们可以使用嵌套for循环来解决这个问题:

int row0, row1, row2;
for(row0=0; row0<2; ++row0) {
  matrix[0][row0] = 1;
  for(row1=0; row1<2; ++row1) {
    matrix[1][row1] = 1;
    for(row2=0; row2<2; ++row2) {
      matrix[2][row2] = 1;
      print_matrix(matrix);
      matrix[2][row2] = 0;
    }
    matrix[1][row1] = 0;
  }
  matrix[0][row0] = 0;
}

当然,这不是一个非常通用的解决方案。很容易将其更改为3xm矩阵(只需将row#<2替换为row#<m-1),但显然这对nxm矩阵不起作用。每当我们将n增加1时,我们需要添加另一个for循环。

我让你知道如何摆脱嵌套的for循环并使用其他技术来概括它。

相关问题