C语言判断关系R是否为自反关系

判断关系R是否为自反关系。键盘输入R的关系序偶,程序输出判断结果

#include <stdio.h>
#include <stdlib.h>
//输入关系
void input(char **a,int n)
{
int x,y;
printf("输入关系,使用1~n之间的整数,使用\",\"分开,例如1,2,完成后输入0,0退出\n");
for(;;)
{
scanf("%d,%d",&x,&y);
if(x<=0 || x>n || y<=0 || y>n)
break;
a[x-1][y-1]=1;
}
}
//确定矩阵大小,分配空间
void init(char ***a,int *len)
{
int i,n;
printf("集合中有几个元素:");
do
{
scanf("%d",&n);
if(n<=1)
printf("n应该大于1\n");
}while(n<=1);

*len=n;
(*a)=(char **)malloc(sizeof(char*)*n);
if((*a)==NULL)
{
printf("malloc error\n");
return;
}

//自反性返回1,否则0
for(i=0;i<n;i++)
{
(*a)[i]=(char*)malloc(sizeof(char)*n);
if((*a)[i]==NULL)
{
printf("malloc error\n");
return ;
}
}
}
int f1(char **a,int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[i][i]==0)
return 0;
}
return 1;
}

//反自反性返回1,否则0
int f2(char **a,int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[i][i]==1)
return 0;
}
return 1;
}

//输出结果 
void show(char** a,int n)
{
char b[6];
b[0]=f1(a,n);
b[1]=f2(a,n);
if(b[0]==1)
printf("关系R具有自反性\n");
else  printf("关系R不具有自反性\n");
if(b[1]==1)
printf("关系R具有反自反性\n");
else  printf("关系R不具有反自反性\n");
}

//删除分配的空间
void del(char **a,int n)
{
int i;
for(i=0;i<n;i++)
free(a[i]);
free(a);
}

//矩阵所有元素置0
void clear(char** a,int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=0;
}
}
}

int main()
{
char **a;
int n;
int count;
init(&a,&n);
printf("有几组关系\n");
scanf("%d",&count);
while(count--)
{
clear(a,n);
input(a,n);
show(a,n);
}
del(a,n);
return 0;
}
发布了10 篇原创文章 · 获赞 3 · 访问量 2891

猜你喜欢

转载自blog.csdn.net/SUNYAN_WADE/article/details/104977925