看到上没有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); } }