首页 > 其他 > 详细

离散实验——二元关系及其性质

时间:2020-06-04 22:33:25      阅读:86      评论:0      收藏:0      [点我收藏+]

【实验目的】

掌握二元关系在计算机上的表示方法,并掌握如果判定关系的性质。

【实验内容】

编程判断一个二元关系是否为等价关系,如果是,求其商集。

例:A={1,2,3,4,5,6,7,8,9,10},R={<x,y>|x、y∈A∧y≡x (mod 5)}判断R是否等价关系,如果是,求出各等价类。

等价关系:集合A上的二元关系R同时具有自反性、对称性和传递性,则称R是A上的等价关系。

 

【源程序及解析】

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define N 10086
int a[N][N], n;
void init()
{
    printf("请输入二元关系的域的个数:");
    scanf("%d", &n);
    printf("请输入关系矩阵。\n");
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            scanf("%d", &a[i][j]);
        }
    }
}
int judge_R(int flag)   // 判断是不是 自反关系
{
    for (int i = 0; i < n&&flag; i++)
        if (a[i][i] == 0)
            flag = 0;
    if (flag)
        return 1;
    return 0;
}
int judge_S(int flag)   // 判断是不是 对称关系
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (a[i][j] && !a[j][i])
                flag = 0;
    if (flag)
        return 1;
    return 0;
}
int judge_T(int flag)   // 判断是不是 传递关系
{
    for (int i = 0; i < n&&flag; i++)
        for (int j = 0; j < n&&flag; j++)
            for (int k = 0; k < n&&flag; k++)
                if (a[i][j] && a[j][k] && !a[i][k])
                    flag = 0;
    if (flag)
        return 1;
    return 0;
}
void show()
{
    int fld[N];  // 二元关系的 域
    for (int i = 0; i < n; i++)
        fld[i] = i + 1;   // i 代表第 i 个元素

    printf("\n商集为:\n");
    printf("{ ");
    for (int i = 0; i < n; i++)   //循环所有元素
    {
        if (fld[i])   // 如果当前元素 所属的等价类 还没打印出来
        {
            printf("{ ");
            for (int j = 0; j < n; j++)
            {
                if (a[i][j] && fld[j])  //  如果与当前元素连通的元素 所属的等价类 还没打印出来
                {
                    printf("%d ", fld[j]);
                    fld[j] = 0;   // 标记 用过的元素,至于 i,因为不会重复循环,所以不用 标记
                }
            }
            printf("} ");
        }
    }
    printf("}\n");
}
int main(void)
{
    init();   // 初始化矩阵
   
    if (judge_R&&judge_S&&judge_T)  // 判断是否是等价关系
        show();    // 打印商集
    else
        printf("该二元关系不是等价关系。\n");

    system("pause");
    return 0;
}
/*测试数据:
10
1 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 1 0
0 0 0 0 1 0 0 0 0 1
1 0 0 0 0 1 0 0 0 0 
0 1 0 0 0 0 1 0 0 0 
0 0 1 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 1 0 
0 0 0 0 1 0 0 0 0 1 

*/

 

 一,等价关系的判断

 

1,自反性 (reflexve) 的判断 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

离散实验——二元关系及其性质

原文:https://www.cnblogs.com/asdfknjhu/p/13046893.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!