今天学习关系之后突然想写一个大程序实现判断二元关系的单根单值和是否等价等等,以后可能还会编一个关系运算的算法。C是两年前学的了,再看到vc的界面还是觉得真的是老的不行。。。把初稿和思路发上来。这个程序直接编译是不行的。细节上要处理。
/*判断其是否为自反、对称、可传递*/
#include <stdio.h>
int main()
{
int i,j,N,B;
printf("输入定义R的集合中的元素个数:\n ");
scanf("%d",&N);
int M[N][N];
B=N;
printf("输入R的关系矩阵,按行输入:\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&M[i][j]);
for(i=0;i<N;i++)
{
for(j=0;j<n;j++)
printf("%4d",&M[i][j]);
printf("\n");
}
void ref(int A[B][B]);
void sym(int A[B][B]);
void cbp(int A[B][B]);
ref(M[N][N]);
sym(M[N][N]);
cbp(M[N][N]);
return 0;
}
void ref(int A[B][B])
{
int i;
int e=1;
for(i=0;i<B;i++)
{
if (A[B][B]!=1)
{
e=0;
break;
}
}
if (e==0)
printf("关系R不是自反的\n");
else
printf("关系R是自反的\n");
}
void sym(int A[B][B])
{
int i,j;
int f=1;
for(i=0;i<B;i++)
{
for(j=0;j<B;j++)
if(A[i][j]!=A[i][j])
{
f=0;
break;
}
break;
}
if (f==0)
printf("关系R不是对称的\n");
else
printf("关系R是对称的\n");
}
void cbp(int A[B][B])
{
int i,j,k;
int s=0;
for(i=0;i<B;i++)
for(j=0;j<B;j++)
if(A[i][j]==0)
continue;
else
for(k=0;k<B;k++)
if(A[j][k]==1&&A[i][k]==0)
{
printf("关系R不是可传递的\n");
goto end;
}
printf("关系R是可传递的\n");
end;
}