c - 数组拼图 :generating all possible combinations

标签 c

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

假设我们有一个全为 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 种组合。 任何人谁能想到任何可能的方法来解决这个问题,请发布它,这非常重要。提前致谢

最佳答案

因为这听起来像是家庭作业,所以我不会为您提供完整的解决方案,而是向您提供一些正确方向的步骤。让我们从 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 加一,我们就需要添加另一个 for 循环。

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

关于c - 数组拼图 :generating all possible combinations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3814525/

相关文章:

C 编程 : store getchar as a char array

c++ - Linux Networking IO Noob : Select() and Recvfrom, 阻塞还是非阻塞?

c++ - 对单行 if 或循环使用大括号(即 {})的目的是什么?

c - 如何从输入中读取多种类型?

c - fread() 由于某种未知原因失败

c - 哪个头文件加载 Win32 api 中的 DLL?

c - 非阻塞连接不会向 kqueue 报告完成情况

c++ - 数组中的重复数字

c - 使用缓存局部性提高 C 函数性能?

c++ - 使用 C/C++ 捕获视频流