C# 如何找到布尔3x3网格算法的所有配置
我需要计算3x3布尔网格的所有唯一配置。C# 如何找到布尔3x3网格算法的所有配置,c#,arrays,algorithm,C#,Arrays,Algorithm,我需要计算3x3布尔网格的所有唯一配置。 我有一个3乘3的网格 中心是参考点 围绕中心的每个磁贴可以是true,也可以是false 如果一个或多个磁贴处于真实状态,则为配置 由于我需要一种方法来计算每个配置的true条目数,因此每个网格单元都分配了一个数字 我已经开发了一系列数字,它们可以组合成8或更少的无限配置,而不会产生重复项:(1,5,9,11290,31,73990) 将配置中的所有数字相加后,它们相加为一个唯一的数字,可用于标识该配置。因此,这是一个非常有用的布尔网格系统 该网格
- 我有一个3乘3的网格
- 中心是参考点
- 围绕中心的每个磁贴可以是
,也可以是true
false
- 如果一个或多个磁贴处于真实状态,则为配置
- 由于我需要一种方法来计算每个配置的
条目数,因此每个网格单元都分配了一个数字true
- 我已经开发了一系列数字,它们可以组合成8或更少的无限配置,而不会产生重复项:
(1,5,9,11290,31,73990)
- 将配置中的所有数字相加后,它们相加为一个唯一的数字,可用于标识该配置。因此,这是一个非常有用的布尔网格系统
该网格的真值表如下所示:
1, 5, 9,
11, 0, 290,
31, 73, 990
如果中间磁贴有1个连接,则有8种可能性:
[1,5,9,11,290,31,73,990]
[6, 10, 12, 291, 32, 74, 991, 14, 16, 295, 36, 78, 995, 20, 299, 40,
82, 999, 301, 42, 84, 1001, 321, 363, 1280, 104, 1021, 1063
如果中间磁贴有2个连接,则有以下几种可能性:
[1,5,9,11,290,31,73,990]
[6, 10, 12, 291, 32, 74, 991, 14, 16, 295, 36, 78, 995, 20, 299, 40,
82, 999, 301, 42, 84, 1001, 321, 363, 1280, 104, 1021, 1063
我已经将前两个配置组分成了几行。(第一行被省略,因为它是一次只有一个单元格为真的配置)
void行2()
{
列表=新列表();
int[]t=新的int[]{1,5,9,11290,31,73990};
字符串s=“[”;
int start=0;
对于(int i=开始;i
这里是另一种方法
bit1_mask = 0000 0001
bit2_mask = 0000 0010
....
bit8_mask = 1000 0000
bits = (n&bit1_mask) + (n&bit2_mask) +.....(n&bit8_mask)
4.2使用2的补码作为掩码来获取最后一个设置位
c=0;
while(n>0){
n&=-n;
++c;
}
c将有位数。为什么不使用1,2,4,8,16,32,64128?然后你可以进行popcount。我认为popcount对我来说有点太高级了。很好。谢谢