2013-12-14 72 views
-7

設A是階數爲3x3的矩陣。確定有多少不同的矩陣可以通過布爾產品矩陣A的形成矩陣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; 
    } 

,但我仍然不知道如何找到布爾動力。

+0

我知道,我只是需要一些幫助而已。它確定如果你不想幫助我的錯。 :) – lizzy

+1

還有很多時間 - 試着想出一個解決方案,如果它不起作用 - 編輯你的問題與代碼 – Leeor

+0

這是我已經想出了一個..你可以看到什麼是錯的。 – lizzy

回答

0

使用std :: set在任何給定的位置都有一個唯一編號的集合。

0

By 布爾矩陣A的產品您似乎意味着矩陣A和矩陣A的布爾積,因爲如您所知,製作產品需要兩個產品。

儘管費力,但您仍然正確實施了布爾矩陣乘積的計算。現在,爲了確定可以形成多少個不同的矩陣,我們必須生成具有值0和1的所有可能的不同3×3矩陣(其中有2個),計算產品,以某種方式存儲結果並計數有多少不同的結果出來。
當然,手工輸入所有的矩陣都是令人厭倦的;所以一開始,圍繞計算環繞一個循環並自動生成不同的矩陣:

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]; 
     } 
    …