离散数学实践二编程判断关系R的性质【java实现】

本文介绍了一种通过矩阵判断关系自反性的方法,并提供了一个Java实现示例。该方法利用HashSet来存储关系矩阵的主对角线元素,进而判断关系是否为自反、反自反或两者都不是。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验要求

  • 判断关系 R 是否为自反关系
    1. 实验类型:设计性
    2. 实验目的
      • 通过算法设计并编程实现对给定集合上的关系是否为自反关系的判断,加深学生对关系性质的理解,掌握用矩阵来判断关系性质的方法。
    3. 实验内容
      • 已知关系 R 由关系矩阵 M 给出,要求判断由 M 表示的这个关系是否为自反关系。
    4. 实验原理
      • 从给定的关系矩阵来断判关系 R 是否为自反是很容易的。若 M(R 的关系矩阵)的主对角线元素均为 1,则 R 是自反关系;若 M(R 的关系矩阵)的主对角线元素均为 0,则 R 是反自反关系;若 M(R 的关系矩阵)的主对角线元素既有 1 又有 0,则 R 既不是自反关系也不是反自反关系。本算法可以作为判等价关系算法的子程序给出。
    5. 实验仪器设备或软件环境及工具
      • 软件环境与编程语言不限。
    6. 实验要求
      • 复习关系的性质,实验由一人一组完成。所编程序能够通过编译,并能够实现对给定集合上的关系自反性质的判定。
    7. 实验步骤及注意事项
      1. 输入关系矩阵 M(M 为 n 阶方阵)。
      2. 判断自反性,对于 i=1,2,….,n;若存在 mii=0,则 R 不是自反的;若存在 mii=1,则 R 是自反的;否则 R 既不是自反关系也不是反自反关系。
      3. 输出判断结果。

思路

  • 关系R的存储结构:二维矩阵
  • 关系R的矩阵输入Scanner类的nextInt()方法
  • 关系R主对角线的遍历:双层循环
  • 关系R主对角线数据的比较:使用HashSet参看《Java集合框架【二容器[LinkedList容器类、Set接口]》】【无序集合,无重复元素】存储主对角线元素值
  • 关系R的判定:通过判断HashSet的长度和包含的数值即可
条件结论
HashSet的长度1,并且包含1自反关系
HashSet的长度为1 ,并且包含0反自反关系
HashSet的长度为2,并且包含0和1既非自反,也非反自反

完整代码

import java.util.HashSet;
import java.util.Scanner;

/**
 * @author 缘友一世
 * date 2022/12/27-11:01
 */
public class demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int width=0;
        System.out.print("请输入关系R矩阵的阶数:");
        if(scanner.hasNextInt()) {
            width=scanner.nextInt();
        }
        int[][] matrix=new int[width][width];
        System.out.println("请输入"+width+"阶矩阵的值[以空格隔开]:");
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix[i].length;j++) {
                if(scanner.hasNextInt()) {
                    matrix[i][j]= scanner.nextInt();
                }
            }
        }
        System.out.println(">>>>>>>>>>>");
        System.out.println("您输入的矩阵为:");
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix[i].length;j++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }

        //无序集合不包含重复元素 如果集合中元素存在,则重复添加失败
        HashSet set = new HashSet();
        for(int i=0;i<matrix.length;i++) {
            set.add(matrix[i][i]);
        }
        //通过判断集合的长度和内容,从而确定关系的性质
        if(set.size()==1 && set.contains(1)) {
            System.out.println("R是自反关系!");
        }else if(set.size()==1 && set.contains(0)) {
            System.out.println("R是反自反关系!");
        }else if(set.size()==2 && set.contains(1) && set.contains(0)) {
            System.out.println("R既不是自反关系也不是反自反关系!");
        }
    }
}

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值