1.【实验目的实验内容M给出,要求判断由M表示的这个关系是否为对称关系。假定R的关系矩阵为:
3.【实验M(R的关系矩阵)为对称矩阵,则R是对称关系;若M为反对称矩阵,则R是反对称关系。因为R为对称的是等价关系的必要条件,所以,本算法可以作为判等价关系算法的子程序给出。
算法实现:
输入关系矩阵M(M为n阶方阵);
判断对称性,对于i=2,3,….,n;j=1,2,……,i-1,若存在mij=mji,则R是对称的;
判断反对称性;
判断既是对称的又是反对称的;
判断既不是对称的又不是反对称的;
输出判断结果。
自反:
从给定的关系矩阵来断判关系R是否为自反是很容易的。若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。本算法可以作为判等价关系算法的子程序给出。
算法实现
输入关系矩阵M(M为n阶方阵)。
判断自反性,对于i=1,2,….,n;若存在mii=0,则R不是自反的;若存在mii=1,则R是自反的;否则R既不是自反关系也不是反自反关系。
输出判断结果。
源代码
#include
void z();
void r();
void main()
{
int d;
while(d)
{
printf("欢迎使用关系性质的判断系统\n\n 1. 对称关系的判断 2. 自反关系的判断\n\n请输入选项:");
scanf("%d",&d);
switch(d){
case 1: r();break;
case 2: z();break;
case 0: break;
}
printf("\n");
printf("是否还继续? 是请输入1,否请输入0:");
scanf("%d",&d);
printf("\n\n");
}return 0;
}
void r()
{
int a[30][30];
int m,n,i,j,c,b,d;
c=0;
d=0;
b=0;
d=1;
printf("请输入矩阵的行数");
scanf("%d",&m);
printf("请输入矩阵的列数");
scanf("%d",&n);
for(i=0;i
{
for(j=0;j
{
printf("请输入矩阵关系中第%d行第%d列的数字:",i,j);
scanf("%d",&a[i][j]);
}
}
printf("关系矩阵M为:\n");
for(i=0;i
{
for(j=0;j
printf("%d ",a[i][j]);
printf("\n");
}
for(i=0;i
{
for(j=0;j
{
if(a[i][j]!=a[j][i])
{
c=1;
break;
}
}
}
if(c==0)
{
for(i=0;i
{
for(j=0;j
if(a[i][j]==1){
if(a[j][i]!=0){
c=2;
break;
}
}
}
}
if(c==2) printf("该矩阵是对称性的\n");
else
if(c==0) printf("该矩阵是既对称又反对称的\n");
}
else
if(c==1){
for(i=0;i
for(j=0;j
if(a[i][j]==1){
if(a[j][i]!=0){
c=2;
break;
}
}
}
}
if(c==2) printf("该矩阵不是对称的又不是反对称的\n");
else{
printf("该矩阵是反对称性的\n");
}
}}
void z()
{
int m,n,i,j,a[80][80],c;
c=0;
printf("请输入矩阵的行数");
scanf("%d",&m)