【发布时间】:2018-03-25 09:32:54
【问题描述】:
编辑:我还必须让每一列的总和等于一个特定的数字!!
我想生成一个二进制 NxN 矩阵,使得每一行包含特定数量的 1,而不重复行。示例:生成4x4矩阵,每行2个1,列值之和为2,即生成
因此,每一行都是唯一的,并且正好有 2 个,每列的总和为 2。错误的答案是:
B =
1 1 0 0
1 0 1 0
1 0 0 1
0 1 1 0
因为第 1 列的总和不等于 2(而是 3),而第 4 列的总和不等于 2(而是 1)。每列加起来应该是2。如何在matlab中得到正确答案?
【问题讨论】:
-
只是评论,因为这不是我的答案:Roger Stafford 显示了一种非常有效的方法来获得所有可能的排列。即使长度 > 10。
x=[1 1 0 0];n = size(x,2); k = sum(x==1); C = nchoosek(1:n,k); m = size(C,1); B = zeros(m,n); B(repmat((1-m:0)',1,k)+m*C) = 1 -
你能用一个例子解释你的编辑吗?
-
是的,完成了。我添加了一个错误的示例。
-
这让我想起了八皇后问题。也许这可以帮助你:8-queens-problem -Generating All Solutions
-
@Irreducible:我认为没有那么复杂。如果矩阵是 4x4,那么我需要每行 2 个。如果矩阵是 6x6,那么我每行需要 3 个,如果是 8x8,则需要 4 个,......等等。每一行应该是唯一的。没有简单的解决方案?