关矩阵传递性的验证 最后做判断时 不会了 求大神知道
#include<stdio.h>#include<string.h>
#include<stdlib.h>
#define MAX 1000
typedef struct
{
int row,col;
int value;
}Triple;
typedef struct
{
Triple data[MAX];
int rows,cols,nums;
}T;
T *Creat()
{
T*A;
int i;
A=(T*)malloc(sizeof(T));
printf("请输入元素总个数:\n");
scanf("%d",&(A->nums));
printf("请输入总行数,总列数:\n");
scanf("%d,%d",&A->rows,&A->cols);
printf("请输入行,列,值\n");
for(i=0;i<A->nums;i++)
{
scanf("%d,%d,%d",&A->data[i].row,&A->data[i].col,&A->data[i].value);
//printf("\n");
}
return A;
}
void Issymmetric(T*A)
{
int i,j; //循环控制变量
int a,b,x,c,d,y;
int count=0; //计数变量 判断是不是对称矩阵
for(i=0;i<A->nums;i++)
{
a=A->data[i].row;
//printf("A:%d\n",a);
b=A->data[i].col;
//printf("B:%d\n",b);
x=A->data[i].value;
//printf("%d\n",x);
for(j=0;j<A->nums;j++)
{
c=A->data[j].row;
// printf("C:%d\n",c);
d=A->data[j].col;
// printf("D:%d\n",d);
y=A->data[j].value; //
// printf("%d\n",y);
if(((a==d)&&(b==c)&&(x==y)))
count++;
// printf("%d\n",count);
}
}
printf("\n\n");
printf("%d\n",count);
if(count==(A->nums))
printf("是对称矩阵\n");
else
printf("不是对称矩阵\n");
}
//自反 在关系矩阵中对角线元素为1
void Iszifan(T*A)
{
int i; //循环控制变量
int count=0;
int a,b;
for(i=0;i<A->nums;i++)
{
a=A->data[i].row;
b=A->data[i].col;
if(a==b&&A->data[i].value==1)
count++;
}
if(count==A->nums)
printf("是自反关系矩阵\n");
else
printf("不是自反关系矩阵\n");
}
//反自反性 在关系矩阵中当且仅当对角线元素都为零
void Isfanzifan(T*A)
{
int i; //循环控制变量
int count=0;
int a,b;
for(i=0;i<A->nums;i++)
{
a=A->data[i].row;
b=A->data[i].col;
if(a==b&&A->data[i].value==1)
count++;
}
if(count==A->nums)
printf("是反自反关系矩阵\n");
else
printf("不是自反关系矩阵\n");
}
//传递性
void deliver(T*A)
{
int i,j,k; //循环控制变量
int a,b;
int c,d;
int count=0;
for(i=0;i<A->nums;i++)
{
a=A->data[i].row;
b=A->data[i].col;
for(j=0;j<A->nums;j++)
{
c=A->data[j].row;
d=A->data[j].col;
if(b==c)
{
for(k=0;k<A->nums;k++)
{
if(a!=A->data[k].row||d!=A->data[k].col)
{
count++;
if(count>(A->nums))
{
printf("%d\n",count);
printf("不是传递关系矩阵\n");
return;
}
}
}
}
}
}
printf("是传递关系矩阵\n");
}
void main()
{
T *B;
int choice;
printf("1:对称性 2:自反性 3:反自反性 4:传递性\n");
printf("请输入选项:");
scanf("%d",&choice);
switch(choice)
{
case 1:{
B=Creat();
Issymmetric(B);
break;
}
case 2:{
printf("请输入关系矩阵\n\n");
B=Creat();
Iszifan(B);
break;
}
case 3:{
printf("请输入关系矩阵\n");
B=Creat();
Isfanzifan(B);
break;
}
case 4:{
printf("请输入关系矩阵\n");
B=Creat();
deliver(B);
break;
}
default :printf("输入选项有误\n");
}
}