矩阵 A 的布尔积

Posted

技术标签:

【中文标题】矩阵 A 的布尔积【英文标题】:Boolean product of matrix A 【发布时间】:2014-01-02 02:26:44 【问题描述】:

令 A 为 3x3 阶矩阵。判断矩阵A的布尔积可以形成多少个不同的矩阵。

这是我想出的:

    #include <stdio.h>

    int main()
    

    int matrixA[3][3];
    int matrixB[3][3];
    int result[3][3];
    int a = 0;
    int b = 0;

    printf("\n Boolean Power of Matrix\n");

    printf("\n Matrix of order 3x3\n\n");



    for(b=0;b<3;b++)
    
        for(a=0;a<3;a++)
        
        printf("Insert  Column %d Row %d : ",a+1,b+1);
        scanf("%d",&matrixA[a][b]);
        matrixB[a][b]=matrixA[a][b];

        

    

    printf("\n");


    for(b=0;b<3;b++)
    
        for(a=0;a<3;a++)
        
        printf("  %d",matrixB[a][b]);

        
        printf("\n");

    

    printf("Boolean Power Matrix of order 3x3\n");


    result[0][0]=(matrixB[0][0]*matrixA[0][0])+(matrixB[0][1]*matrixA[1]        [0])+(matrixB[0][2]*matrixA[2][0]);
    if (result[0][0]==2 || result[0][0]==3)
    
        result[0][0]=1;
    
    result[0][1]=(matrixB[0][0]*matrixA[0][1])+(matrixB[0][1]*matrixA[1][1])+(matrixB[0][2]*matrixA[2][1]);
    if(result[0][1]==2 || result[0][1]==3)
    
        result[0][1]=1;
    
    result[0][2]=(matrixB[0][0]*matrixA[0][2])+(matrixB[0][1]*matrixA[1][2])+(matrixB[0][2]*matrixA[2][2]);
    if(result[0][2]==2 || result[0][2]==3)
    
        result[0][2]=1;
    
    result[1][0]=(matrixB[1][0]*matrixA[0][0])+(matrixB[1][1]*matrixA[1][0])+(matrixB[1][2]*matrixA[2][0]);
    if(result[1][0]==2 || result[1][0]==3)
    
        result[1][0]=1;
    
    result[1][1]=(matrixB[1][0]*matrixA[0][1])+(matrixB[1][1]*matrixA[1][1])+(matrixB[1][2]*matrixA[2][1]);
    if(result[1][1]==2 || result[1][1]==3)
    
        result[1][1]=1;
    
    result[1][2]=(matrixB[1][0]*matrixA[0][2])+(matrixB[1][1]*matrixA[1][2])+(matrixB[1][2]*matrixA[2][2]);
    if(result[1][2]==2 || result[1][2]==3)
    
        result[1][2]=1;
    

    result[2][0]=(matrixB[2][0]*matrixA[0][0])+(matrixB[2][1]*matrixA[1][0])+(matrixB[2][2]*matrixA[2][0]);
    if(result[2][0]==2 || result[2][0]==3)
    
        result[2][0]=1;
    
    result[2][1]=(matrixB[2][0]*matrixA[0][1])+(matrixB[2][1]*matrixA[1][1])+(matrixB[2][2]*matrixA[2][1]);
    if(result[2][1]==2 || result[2][1]==3)
    
        result[2][1]=1;
    
    result[2][2]=(matrixB[2][0]*matrixA[0][2])+(matrixB[2][1]*matrixA[1][2])+(matrixB[2][2]*matrixA[2][2]);
    if(result[2][2]==2 || result[2][2]==3)
    
        result[2][2]=1;
    


    for(b=0;b<3;b++)
    
        for(a=0;a<3;a++)
        
        printf(" %d ",result[a][b]);

        
        printf("\n");

    



    return 0;
    

但我仍然不知道如何找到布尔幂。

【问题讨论】:

我知道,我只是需要一些帮助而已。如果你不想帮助也没关系。我的错。 :) 还有很多时间 - 尝试提出解决方案,如果不起作用 - 使用代码编辑您的问题 这是我想出的那个..你能看看有什么问题吗。 【参考方案1】:

使用 std::set 在任何给定位置拥有唯一数字的集合。

【讨论】:

【参考方案2】:

矩阵 A 的布尔乘积您似乎是指矩阵 A 和矩阵 A 的布尔乘积,因为如您所知,产生一个乘积需要两个。

尽管费力,但您正确地实现了布尔矩阵乘积的计算。现在,为了确定可以形成多少个不同的矩阵,我们必须生成所有可能的值为 0 和 1 的不同 3x3 矩阵(其中有 23x3),计算乘积,存储结果以某种方式,并计算有多少不同的结果出来。 当然,手动输入所有的矩阵会很累;因此,首先,围绕计算循环并自动生成不同的矩阵:

  int i;
  for (i = 0; i < 1<<3*3; ++i)
  
    for (b=0; b<3; b++)
        for (a=0; a<3; a++)
         
        /* drop the manual input
        printf("Insert  Column %d Row %d : ",a+1,b+1);
        scanf("%d",&matrixA[a][b]);
        */
          matrixA[a][b]=i>>a+b*3&1;
          matrixB[a][b]=matrixA[a][b];
        
    …

【讨论】:

以上是关于矩阵 A 的布尔积的主要内容,如果未能解决你的问题,请参考以下文章

在 numpy 中从具有索引的 2D 矩阵构建 3D 布尔矩阵

离散数学 关系矩阵的布尔乘法的简便方法

1126 : 布尔矩阵

TK1026: 布尔矩阵

ZZNUOJ_C语言1126 : 布尔矩阵(附完整源码)

布尔矩阵