【问题标题】:array puzzle:generating all possible combinations数组拼图:生成所有可能的组合
【发布时间】:2010-09-28 15:41:24
【问题描述】:

我正在做一个项目,这部分对我来说非常重要。我会尽量说清楚。

假设我们有一个全为 0 的 mxn 矩阵,我需要生成数组的所有可能组合,其中一行中只有一个元素被初始化为 1,而该行中的所有其他元素都是 0。同样,在所有行中,只有一个元素应该是 1。例如:取一个 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 1]

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

【问题讨论】:

  • 这听起来像是家庭作业。如果是,它应该被标记为这样。
  • 如果您使用 C++,您将拥有next_permutation 函数。它适用于 STL 容器并满足您的需求。

标签: c


【解决方案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#&lt;2 替换为 row#&lt;m-1),但显然这不适用于 nxm 矩阵。每次我们将 n 加一时,我们都需要添加另一个 for 循环。

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

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2016-08-16
    • 2016-01-07
    • 2022-08-22
    • 2017-04-16
    相关资源
    最近更新 更多