栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

离散数学 集合论 编程实现关系性质的判断

C/C++/C# 更新时间:发布时间: 百科书网 趣学号

编程实现关系性质的判断
    • 实验要求
    • 验证原理
    • 源代码(c语言)
    • 运行结果

作业交了顺便留个档

实验要求
  • 用矩阵表示二元关系
  • 通过矩阵的特征判断二元关系所具有的性质
  • 运用二维数组实现矩阵的输入,然后判断自反性,反自反性,对称性,反对称性,传递性
验证原理

源代码(c语言)
#include 
#include 

int main()
{
    int m, i, j, k; //二维数组模拟矩阵,和循环计数器
    int run = 1;    //用于矩阵性质是否成立的判断

    printf("请输入关系转换后的矩阵,本程序将验证其自反性,反自反性,对称性,反对称性,传递性并输出结果n");
    printf("输入矩阵的维数:");
    scanf("%d", &m);
    int a[m][m]; //关系矩阵M
    int c[m][m]; //M^2
    //输入矩阵
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    printf("-----------------------n");
    //预览矩阵
    printf("您输入的矩阵如下: n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {

            printf("%d ", a[i][j]);
        }
        printf("n");
    }
    //自反性判断:主对角线元素全是1
    for (i = 0; i < m; i++)
    {
        if (a[i][i] == 0)
        {
            printf("此关系无自反性!n");
            run = 0;
            break;
        }
    }
    if (run == 1)
    {
        printf("此关系有自反性!n");
    }
    else
    {
        run = 1;
    }
    //反自反性判断:主对角线元素全是0
    for (i = 0; i < m; i++)
    {
        if (a[i][i] == 1)
        {
            printf("此关系无反自反性!n");
            run = 0;
            break;
        }
    }
    if (run == 1)
    {
        printf("此关系有反自反性!n");
    }
    else
    {
        run = 1;
    }
    //对称性判断:对称矩阵
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (a[i][j] != a[j][i])
            {

                run = 0;
            }
        } //如果对称方向上的数不相等,则不是对称矩阵
    }
    if (run == 1)
    {
        printf("此关系有对称性!n");
    }
    else
    {
        printf("此关系无对称性!n");
        run = 1;
    }
    //非对称性判断 若rij=1, 且i≠j, 则rji=0
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (a[i][j] == 1 && i != j)
            {
                if (a[j][i] == 0)
                {
                    run = 1;
                }
                else
                {
                    run = 0;
                    break;
                }
            }
        } //如果对称方向上的数不相等,则不是对称矩阵
    }
    if (run == 1)
    {
        printf("此关系有反对称性!n");
    }
    else
    {
        printf("此关系无反对称性!n");
        run = 1;
    }
    //传递性判断 对M^2中1所在位置,M中相应位置都是1  0也可以
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            for (k = 0; k < m; k++)
            {
                c[i][j] = c[i][j] + a[i][k] * a[k][j];
            }
        }
    } // 计算M^2
      
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (a[i][j] == 0)
            {
                if (c[i][j] != 0)
                {

                    run = 0;
                }
            }
        }
    }

    if (run == 1)
    {
        printf("此关系有传递性!n");
    }
    else
    {
        printf("此关系无传递性!n");
    }
    return 0;
}

运行结果



传递性算法思路来源

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/296330.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号