1、关系矩阵的特性判断
判断任意给定一个6×6的关系矩阵是否是自反的、对称的、反对称的,并显示运算结果。
#include <iostream>
using namespace std;
int main()
{
int a[6][6],i;
for(i=0;i<6;i++)
{
for(int j=0;j<6;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<6;i++)
{
if(a[i][i]!=1)
break;
}
if(i==6)
cout<<"自反的"<<endl;
else
cout<<"不是自反的"<<endl;
int flag=0;
for(i=0;i<6;i++)
{
for(int j=0;j<6;j++)
{
if(a[i][j]!=a[j][i])
{
flag=1;
break;
}
}
}
if(flag==0)
cout<<"对称的"<<endl;
else
cout<<"不是对称的"<<endl;
int m=0;
for(i=0;i<6;i++)
{
for(int j=0;j<6;j++)
{
if(a[i][j]==a[j][i]&&i!=j&&a[i][j]==1)
{
m=1;
break;
}
}
}
if(m==0)
cout<<"反对称的"<<endl;
else
cout<<"不是反对称的"<<endl;
return 0;
}
/*
1 0 1 0 1 0
0 1 0 0 1 0
1 1 0 1 0 0
0 0 1 0 1 1
1 0 1 1 0 1
0 0 1 0 1 1
*/
2、关系矩阵的闭包
对输入的矩阵,输出其自反闭包、对称闭包,并利用Warshall算法实现其传递闭包。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[100][100],b[100][100],c[100][100],d[100][100];
int n,m,i,j;
while(cin>>n>>m)
{
memset(b,0,sizeof(b));
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
cin>>a[i][j];
c[i][j]=a[i][j];
d[i][j]=a[i][j];
}
}
cout<<"自反闭包是:"<<endl;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(i==j)
{
b[i][j]=1;
}
else
b[i][j]=a[i][j];
cout<<b[i][j]<<" ";
}
cout<<endl;
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(d[j][i]==1)
d[i][j]=d[j][i];
}
}
cout<<"对称闭包是:"<<endl;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
cout<<d[i][j]<<" ";
}
cout<<endl;
}
for(j=0; j<m; j++)
{
for(i=0; i<n; i++)
{
if(c[i][j]==1)
for(int k=0; k<n; k++)
{
c[i][k]=c[i][k]||c[j][k];
}
}
}
cout<<"传递闭包是:"<<endl;
for(i=0; i<n; i++)
{
for(int k=0; k<m; k++)
{
cout<<c[i][k]<<" ";
}
cout<<endl;
}
}
return 0;
}
/*
4 4
0 1 0 0
1 0 1 0
0 0 0 1
0 0 0 0
7 7
1 1 0 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
*/