C++ 矩阵A的布尔积
设A为3x3阶矩阵。确定矩阵A的布尔积可以形成多少个不同的矩阵 这就是我想到的:C++ 矩阵A的布尔积,c++,c,matrix,boolean,C++,C,Matrix,Boolean,设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("\
#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;
}
但是我仍然不知道如何找到布尔幂。使用std::set在任何给定位置都有一个唯一数字的集合。通过矩阵a的布尔积,你似乎是指矩阵a和矩阵a的布尔积,因为正如你所知,需要两个人才能得到一个乘积 您正确地实现了布尔矩阵乘积的计算,尽管这很费劲。现在,为了确定可以形成多少不同的矩阵,我们必须生成所有可能不同的3x3矩阵,其值为0和1,其中有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];
}
…
我知道,我只是需要一些帮助而已。如果你不想帮忙,那没关系还有很多时间-试着想出一个解决方案,如果它不起作用-用代码编辑你的问题这就是我想出的一个..你能看出哪里出了问题吗。