NJUPT南邮 | 离散数学_实验三

内容:
求取集合A上的整除关系R对应的盖住关系,并判定偏序集是否为格,若是格,判断其是否为有补格。
要求:
集合A可以是用户任意给定的正整数集合。

package exp03;import java.util.*;
import java.util.stream.Collectors;class Poset {int A[];    // 集合int R[][];  // 关系矩阵public Poset(int[] a) {A = a;// 初始化关系矩阵R=new int[A.length][A.length];for(int i = 0; i < A.length; i++){for(int j = 0; j < A.length; j++){if(A[j] % A[i] == 0){  //如果满足整除关系,就设为 1R[i][j] = 1;}}}}// 求取盖住关系public void displayCOVER() {int matrixs[][]=R;  // 用于判断盖住关系的二元数组for(int i = 0; i < A.length; i++){for(int j = 0; j <A.length; j++){for(int k = 0; k <A.length; k++){matrixs[k][k] = 0;  // 去掉自反性if(matrixs[i][j]==1 && matrixs[j][k]==1){matrixs[i][k] = 0;  // 去掉传递性}}}}System.out.print("COV A={");for(int i = 0; i <A.length; i++){for(int j = 0; j <A.length; j++){if(matrixs[i][j]==1){  //除去前面去掉的,其他就满足盖住关系了System.out.print("<"+A[i]+","+A[j]+">,");}}}System.out.println("\b}");}// 判断是否为格public boolean isLattice(){int Gcd=0;  // 最大公约数int Lcm=0;  // 最小公倍数boolean flag=true;List<Integer> list = Arrays.stream(A).boxed().collect(Collectors.toList()); // 转化为集合便于查询元素for(int i=0;i<A.length;i++){for (int j=0;j<A.length;j++){if(i==j)continue;Gcd = gcd(A[i],A[j]); // 求最大下界Lcm = A[i] / Gcd * A[j]; // 求最小上界// 遍历A,若Gcd和Lcm都在A中,为格if(!(list.contains(Gcd)&&list.contains(Lcm))){return false;}}}return flag;}// 求最大公约数private int gcd(int x, int y) {int m;//辗转相除法do{m = x % y;x = y;y = m;}while(m != 0);return x;}public boolean isComplementedLattice() {int Gcd=0;  // 最大公约数int Lcm=0;  // 最小公倍数boolean flag;List<Integer> list = Arrays.stream(A).boxed().collect(Collectors.toList()); // 转化为集合便于查询元素Collections.sort(list);for(int i=0;i<A.length;i++){flag=false;for (int j=0;j<A.length;j++){if(i==j)continue;Gcd = gcd(A[i],A[j]); // 求最大下界Lcm = A[i] / Gcd * A[j]; // 求最小上界// 有界格if( (Gcd==list.get(0)) && (Lcm==list.get(list.size()-1))){flag = true;break;}}if(!flag){return false;}}return true;}
}
package exp03;import java.util.Scanner;public class Test03 {public static void main(String[] args) {System.out.println("请输入正整数集合A:");// 将用户输入转化成数组Scanner inA = new Scanner(System.in);String stringA[] = inA.nextLine().split(" ");int num[] = new int[stringA.length];for (int i = 0; i < stringA.length; i++) {num[i] = Integer.parseInt(stringA[i]);//System.out.println(stringA[i]);}// 初始化偏序集Poset poset=new Poset(num);poset.displayCOVER();if (poset.isLattice()){System.out.println("是格");if(poset.isComplementedLattice())System.out.println("是有补格");elseSystem.out.println("不是有补格");}elseSystem.out.println("不是格");}
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部