couting transitive relation

本文介绍了一个用于计算特定规模下所有传递关系数量的C语言程序。该程序通过位操作检查每个可能的关系矩阵是否满足传递性条件,并统计满足条件的关系总数。

 

一个计算Transitive relation个数的程序。

目前,只能计算到1--5.

等有空了,对程序扩充。

 

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int checkTransitive(int num, int* bit, int nSize)
{
    for(int i = 0; i < nSize; i++)
        for(int j = 0; j < nSize; j++)
            for(int k=0; k< nSize; k++)
            {
                int xy=num & bit[i*nSize+j];
                int yz=num & bit[j*nSize+k];
                int xz=num & bit[i*nSize+k];

                if(xy && yz)
                {
                    if (!xz)
                    {
                        return 0;
                    }
                }
            }

    return 1;

}

int main()
{
    int nSize=5;

    int* bit = (int*)malloc(sizeof(int)*nSize*nSize);

    bit[0]=1;
    for(int i = 1; i < nSize*nSize; i++)
    {
        bit[i]=bit[i-1]*2;       
        printf("%d is %8d/n" , i, bit[i]);   
   
    }

    int maxNum = bit[nSize*nSize-1]*2;

    int count = 0;
   
    for(int i = 0; i < maxNum; i++)
    {
        if(checkTransitive(i, bit, nSize))   
        {
            count++;
        }
    }

    printf("count is %4d/n" , count);   
   
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值