离散数学判断集合的二元关系(相容、偏序、等价)

第一次在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;
}
发布了17 篇原创文章 · 获赞 1 · 访问量 278

猜你喜欢

转载自blog.csdn.net/qq_30204577/article/details/103092905