【离散数学】编程练习:求关系的传递闭包

北城以北 提交于 2020-01-26 11:15:47

输入
一次输入一个关系矩阵,每一行两个相邻元素之间用一个空格隔开,输入元素的行与列分别对应关系矩阵的行与列。关系的基数小于12。
输出
输出该关系的传递闭包所对应的关系矩阵。
友情提示:可以使用while (scanf("%d",&a)!=EOF)
在这里插入图片描述


#include <stdio.h>
#include <math.h>

#define MAX 101
int main()
{
    int data[MAX];
    int trans[MAX][MAX];
    int n = 0, i = 0, k = 0, j = 0;

    while (scanf("%d", &data[n]) != EOF)
        n++;

    int *p = data;

    for (i = 0; i < sqrt(n); i++)
    {
        for (j = 0; j < sqrt(n); j++)
        {
            trans[i][j] = p[j];
        }
        p += (int)sqrt(n);
    }

    for (k = 0; k < sqrt(n); k++)
    {        for (i = 0; i < sqrt(n); i++)
        {
            for (j = 0; j < sqrt(n); j++)
            {
                trans[i][j] = trans[i][j] || (trans[i][k] && trans[k][j]);
            }
        }
    }

    for (i = 0; i < sqrt(n); i++)
    {
        for (j = 0; j < sqrt(n); j++)
        {
            if (j < (int)sqrt(n) - 1)
                printf("%d ", trans[i][j]);
            else
                printf("%d", trans[i][j]);
        }
        printf("\n");
    }
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!