# c语言程序判断关系R在集合A是否等价、相容、偏序

2 篇文章 0 订阅
1 篇文章 0 订阅
1 篇文章 0 订阅

## 代码

#pragma once

#define TRUE			 1
#define FALSE			 0
#define OK				 1
#define ERROR			 1
#define INFEASIBLE		-1
#define OVERFLOW		-2

typedef int Status;



#pragma once

#include<cstdio>
#include<iostream>

#include"const.h"

using namespace std;

Status Reflexive(int arr[50][50],int num)//判断是否自反
{
int i,flag=0;

for (i = 0; i < num; i++)
{
if (arr[i][i] == 1)
{
flag++;
}
}
if (flag == num)
return OK;
else
return FALSE;

}

Status Symmetry(int arr[50][50], int num)//判断是否对称
{
int i, j;
int flag = 0;
for (i = 0; i < num-1; i++)
{
for (j = i+1; j < num; j++)
{
if (arr[i][j] != arr[j][i])
flag = 1;
}
}
if (flag == 0)
return OK;
else
return FALSE;
}

Status Asymmetry(int arr[50][50], int num)//判断是否为反对称
{
int i, j;
int flag = 0;
for (i = 0; i < num - 1; i++)
{
for (j = i + 1; j < num; j++)
{
if (arr[i][j]==1 && arr[j][i]==1)
flag = 1;
}
}
if (flag == 0)
return OK;
else
return FALSE;
}

Status Transitive(int arr[50][50], int num)//判断是否传递
{
int i, j;
int p1;
int flag = 0;

for (i = 0; i < num; i++)
{
for (j = 0; j < num; j++)
{
if (i != j)
{
if (arr[i][j] == 1)
{
for (p1 = 0; p1 < num; p1++)
{
if (arr[j][p1] == 1)
{
if (arr[i][p1] != 1)
flag = 1;
}
}
}
}
}
}
if (flag == 0)
return OK;
else
return FALSE;

}



#include"Function.h"

//1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
int main()
{
int a[50];//用来存放集合A；
int arr[50][50];//用来存放关系矩阵
int i, j,num;//num存集合元素个数

cout << "请输入集合A的个数：";
//printf("请输入集合A的个数：");
//scanf("%d", &num);
cin >> num;

//printf("请输入集合A的所有元素\n");
cout << "请输入集合A的所有元素"<<endl;
for (i = 0; i < num; i++)
//scanf("%d", &a[i]);
cin >> a[i];

//printf("请输入关系矩阵(按行序输入)\n");
cout << "请输入关系矩阵R(按行序输入)" << endl;
for (i = 0; i < num; i++) {
for (j = 0; j < num; j++) {
//scanf("%d", &arr[i][j]);
cin >> arr[i][j];
}
}

int mark1=0, mark2=0, mark3 = 0,mark4=0;

mark1 = Reflexive(arr, num);
mark2 = Symmetry(arr, num);
mark3 = Asymmetry(arr, num);
mark4 = Transitive(arr, num);

if (mark1 == 1 && mark2 == 1&& mark4 == 1)
cout << "关系R在A上是等价的" << endl;
else
cout << "关系R在A上不是等价的" << endl;
if (mark1 == 1 && mark2 == 1)
cout << "关系R在A上是相容的" << endl;
else
cout << "关系R在A上不是是相容的" << endl;
if (mark1 == 1 && mark3 == 1 && mark4 == 1)
cout << "关系R是A的一个偏序关系" << endl;
else
cout << "关系R不是A的一个偏序关系" << endl;

cin.get();
cin.get();
return OK;
}



## 输出结果

• 19
点赞
• 48
收藏
觉得还不错? 一键收藏
• 打赏
• 9
评论
03-30
12-03
04-13 793
05-21
06-27 1881
05-30 515

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。