编程实现任意集合上二元关系的性质判定
——2020.10.20
看到CSDN上没有java语言对于此实验的实现,便使用java语言简单对此实验进行了比较粗糙的代码实现,写的时间较短,比较急促,没有对程序进行优化,比较笨重,日后进行修改优化。欢迎请批评指正—XRH。
大概思路:
利用关系矩阵进行性质判定较为简单,令用户输入集合元素和关系矩阵后利用代码进行判定
1.创建两个二维数组,分别用来存储集合中成对的元素和关系矩阵;
2.将五种判别方法通过简单的for循环进行实现
import java.lang.reflect.Array;
import java.util.Scanner;
/*
编程实现任意集合上二元关系的性质判定
要求:
能正确判断任意二元关系的自反性、对称性、传递性、反自反性、反对称性
思路:用户输入对关系矩阵进行0-1赋值,利用关系矩阵进行后续判断
*/
public class Set {
//自反性
void ZF(int [][]arr,int n){
boolean flag=true;
for (int i=0;i<n;i++){
if(!(arr[i][i] ==1))
flag=false;
}
if (flag==true)
System.out.println("具有自反性");
else
System.out.println("不具有自反性");
}
//对称性
void DC(int [][] arr,int n){
boolean flag=true;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
if (!(arr[i][j]==arr[j][i]))
{
flag=false;
break;
}
}
}
if (flag==true)
System.out.println("具有对称性");
else
System.out.println("不具有对称性");
}
//传递性
void CD(int [][] arr,int [][]map,int n,int m){
boolean flag=true;
for (int i=0;i<m;i++){
for (int j=1;j<m;j++){
if (map[i][1]==map[j][0]){
int a=map[i][0],b=map[j][1];
if (arr[a][b]!=1)
flag=false;
break;
}
}
if (flag==false)
break;
}
if (flag==false)
System.out.println("不具有传递性");
else
System.out.println("具有传递性");
}
//反自反性
void FZF(int [][] arr,int n){
boolean flag=true;
for (int i=0;i<n;i++){
if (arr[i][i]==1)
flag=false;
break;
}
if (flag==false)
System.out.println("不具有反自反性");
else
System.out.println("具有自反性");
}
//反对称性
void FDC(int [][] arr,int n){
boolean flag=true;
for (int i=0;i<n;i++){
for (int j=1;j<n;j++){
if(arr[i][j]==1&&arr[j][i]==1&&i!=j){
flag=false;
break;
}
}
}
if (flag==false)
System.out.println("不具有反对称性");
else
System.out.println("具有反对称性");
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入集合中元素的个数:");
int n = in.nextInt();//元素个数
System.out.println("请输入集合中关系个数:");
int m=in.nextInt();//关系个数
int[] [] map=new int[m][2];
System.out.println("请输入集合中的关系元素,以空格相隔:");
for (int i=0;i<m;i++){
map[i][0]=in.nextInt();
map[i][1]=in.nextInt();
}
int [] []matrix=new int [n] [n];//矩阵数组
System.out.println("请根据集合中二元关系对关系矩阵赋值(0-1):");
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
System.out.print("matrix"+"["+i+"]"+"["+j+"]: ");
matrix[i][j]=in.nextInt();
}
}
//输出矩阵
System.out.println("关系矩阵:");
for (int z=0;z<n;z++){
for (int x=0;x<n;x++){
System.out.print(matrix[z][x]+" ");
}
System.out.println(" ");
}
System.out.println(" ");
Set set=new Set();
set.ZF(matrix,n);
set.DC(matrix,n);
set.CD(matrix,map,n,m);
set.FDC(matrix,n);
set.FZF(matrix,n);
}
}