第一次在CSDN上写文章,直接上代码了,这个题目也不难,各个函数都非常的容易理解。(略显智障的函数名…
#include<stdio.h>
#include<stdlib.h>
int Relation_matrix[15][15],Tmp[15][15];
int R_size,R_num;
typedef int Status;
Status Zifan();
Status Duichen();
Status Fanduichen();
Status Chuandi();
Status Fanzifan();
void Warshall();
void menu();
void menu(){
printf("\t\t该系统可以判断一个关系是否为等价关系、相容关系、偏序关系。\n");
printf("\t\t对于输入格式,我们在此做出以下约定:\n\t首先输入两个数,第一个数表示集合中元素的个数,第二个数表示关系中序偶的个数\n");
printf("\t\t然后依次输入若干对元素,以表示关系矩阵中的元素为1的坐标\n");
printf("\t\t对于输入错误的序偶,只需要在输入该序偶的下方重新输入即可\n");
printf("\t\tMade By TedLau ZZU\n");
}
Status Zifan(){
for(int i = 1;i <= R_size;i++){
if(Relation_matrix[i][i] != 1){
return 0;
}
}
return 1;
}
Status Duichen(){
for(int i =1;i<= R_size;i++){
for(int j = 1;j <= R_size;j++){
if(Relation_matrix[i][j] != Relation_matrix[j][i]){
return 0;
}
}
}
return 1;
}
void Warshall(){
for(int i = 1;i <= R_size; i++){
for(int j = 1;j <= R_size;j++){
Tmp[i][j] = Relation_matrix[i][j];
}
}
for(int i=1;i <= R_size; i++){
for(int j = 1;j <= R_size;j++){
if(Tmp[j][i] == 1){
for(int k = 1;k <= R_size;k++){
Tmp[j][k] = Tmp[j][k]+Tmp[i][k];
if(Tmp[j][k]>=1){
Tmp[j][k]=1;
}
}
}
}
}
}
Status Chuandi(){
Warshall();
for(int i = 1;i <= R_size; i++){
for(int j = 1;j <= R_size;j++){
if(Tmp[i][j] != Relation_matrix[i][j]){
return 0;
}
}
}
return 1;
}
Status Fanzifan(){
for(int i = 1;i <= R_size;i++){
for(int j = 1;j <= R_size;j++){
if(Relation_matrix[i][i] == 1){
return 0;
}
}
}
return 1;
}
Status Fanduichen(){
for(int i = 0;i<= R_size-1;i++){
for(int j = i;j <= R_size;j++){
if(Relation_matrix[i][j] ==1 && Relation_matrix[j][i] ==1 && i == j){
}else{
return 0;
}
}
}
return 1;
}
int main(){
menu();
int tmp1,tmp2;
printf("请输入集合的元素个数以及序偶的个数\n");
scanf("%d",&R_size);
scanf("%d",&R_num);
if(R_num>R_size*R_size) {
printf("输入错误,退出系统!!!\n");
return 0;
}
printf("请逐一输入序偶的坐标\n");
for(int i = 0;i < R_num;){
scanf("%d%d",&tmp1,&tmp2);
if(tmp1<=R_size&&tmp2<=R_size){
Relation_matrix[tmp1][tmp2] = 1;
i++;
}
}
if(Zifan() && Duichen()){
printf("具有相容关系\n");
}else{
printf("不具有相容关系\n");
}
if(Zifan() && Fanduichen() && Chuandi()){
printf("具有偏序关系\n");
}else{
printf("不具有偏序关系\n");
}
if(Zifan() && Duichen() && Chuandi()){
printf("具有等价关系\n");
}else{
printf("不具有等价关系\n");
}
printf("谢谢使用!\n");
return 0;
}