这个问题是离散数学中的关系矩阵问题,设关系矩阵为R1: 1 0 1 R2: 1 0 1
1 0 1 0 1 1
0 1 0 1 0 0
则根据公式运算方法为
1∧1 ∨ 0∧0 ∨ 1∧1 1∧0 ∨ 0∧1 ∨ 1∧0 1∧1 ∨ 0∧1 ∨ 1∧0
1∧1 ∨ 0∧0 ∨ 1∧1 1∧0 ∨ 0∧1 ∨ 1∧0 1∧1 ∨ 0∧1 ∨ 1∧0
0∧1 ∨ 1∧0 ∨ 0∧1 0∧0 ∨ 1∧ 1 ∨ 0∧0 0∧1∨ 1∧1 ∨ 0∧0
因为生成的新矩阵C的第一个元素(1,1),我们可以将A矩阵的第一列1,1,0放到一个数组里,将B矩阵的第一行1 0 1进行一一对应,即同时为1的时候那么其结果就是1,所以我们可以以此解决问题,代码如下:
#include <iostream>
using namespace std;
const int N=100;
int A[N][N];
int B[N][N];
int a,b,c;
//构造一个方法:对生成的矩阵的位置进行判断是否有同时为1,如果有就返回1,否则返回0.
int pan(int d,int e){
for(int i=1;i<=b;i++){
if(A[d][i]==1&&B[i][e]==1){ //进行判断是否有同时为1的
return 1;
}
}
return 0;
}
int main(){
cout<<"请分别输入第一个矩阵的行数,列数。第二个矩阵的列数(第一个矩阵的列数等于第二个矩阵的行数,因此不用输入)" ;
cin>>a>>b>>c;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
cin>>A[i][j];
}
}
for(int i=1;i<=b;i++){
for(int j=1;j<=c;j++){
cin>>B[i][j];
}
}
for(int i=1;i<=a;i++){
for(int j=1;j<=c;j++){
cout<<pan(i,j);
}
cout<<endl;
}
return 0;
}