• 大小: 341KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: C/C++
  • 标签: C语言  闭包  

资源简介

C语言实现三种闭包算法,能够实现传递,自反,对称闭包

资源截图

代码片段和文件信息

#include
#define M 38
#define N 6
int aijkfstb[M]e[N]c[N][N]g[N][N]h[N][N]d[N][N]={0};          /*定义全局变量,使写程序更便捷*/
void main()
{
void initiate(int c[]int n);
void sort_e();
void change_d();
void print();
void relation1();
void relation2();
void relation3();          /*声明子函数*/
printf(“集合有几个元素?:\n“);
scanf(“%d“&f);
/*要求输入集合和该集合上的一个关系,因为已知这两个才能将这个关系的关系矩阵画出来*/
printf(“输入集合的元素(是数字且输入时数字间用空格隔开):\n“);
initiate(ef);          /*给e数组赋值*/
printf(“关系中有几个有序对?:\n“);
scanf(“%d“&a);
printf(“输入关系(只输入每个有序对的第一、二元素且输入时数字间用空格隔开):\n“);
initiate(b2*a);          /*给b数组赋值*/
sort_e();          /*使e数组中的元素按从小到大的排序排列*/
change_d();          /*把是1的位置值变为1*/
printf(“关系的关系矩阵为:\n“);
    print();
relation1();          /*求关系的自反闭包*/
relation2();          /*求关系的对称闭包*/
relation3();          /*求关系的传递闭包*/
}

void initiate(int c[]int n)
{
for(i=0;i scanf(“%d“&c[i]);
}

void sort_e()
{
for(i=0;i {
k=i;
for(j=i+1;j if(e[j] if(k!=i)
{
t=e[i];
e[i]=e[k];
e[k]=t;
}
}          /*用选择法排序*/
}

void change_d()           /*把是1的位置值变为1*/
{
for(i=0k=1;k {
        for(j=0;j     if(b[i]==e[j])
{
    s=j;
        break;
}
    for(j=0;j     if(b[k]==e[j])
{
    t=j;          /*找矩阵中值为1的位置*/
    break;
}
    d[s][t]=1;          /*找到位置后把该位置的值变为1*/
}
}

void print()
{
for(i=0;i {
for(j=0;j printf(“%d “d[i][j]);
printf(“\n“);
}
}

void relation1()
{
for(i=0;i for(j=0;j c[i][j]=d[i][j];          /*将矩阵的值赋给c数组*/
for(i=0;i {
for(j=0;j {
if(i==j)
c[i][j]=1;          /*使矩阵的主对角线上的值全变为1*/
}
}
printf(“----------------------------------------\n“);
printf(“自反闭包为\n“);
    for(i=0;i {
for(j=0;j {
printf(“%d “c[i][j]);
}
printf(“\n“);
}
printf(“以集合表示为r(R):\n“);
for(i=0;i      for(j=0;j     if(c[i][j]!=0)
     printf(“<%d%d>“i+1j+1);
      printf(“\n“);
}

void relation2()
{
for(i=0;i for(j=0;j g[i][j]=d[i][j];          /*将矩阵的值赋给g数组*/
printf(“----------------------------------------\n“);
    for(i=0;i {
for(j=0;j {
if(g[i][j]==1)
{
g[j][i]=1;          /*把值为1的位置的对称位置的值也变为1*/
}
}
}
    printf(“对称闭包为\n“);
    for(i=0;i {
for(j=0;j {
printf(“%d “g[i][j]);
}
printf(“\n“);
}
printf(“以集合表示为s(R):\n“);
for(i=0;i      for(j=0;j     if(g[i][j]!=0)
     printf(“<%d%d>“i+1j+1);
      printf(“\n“);
}

void relation3()
{
int result(int xint yint z);
for(i=0;i for(j=0;j h[i][j]=d[i][j];          /*将矩阵的值赋给h数组*/
printf(“-------------------------------------\n“);
printf(“传递闭包为\n“);
for(k=0;k {
printf(“*************

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      33792  2010-06-01 11:19  求三种闭包\Debug\vc60.idb

     文件      45056  2010-06-01 11:18  求三种闭包\Debug\vc60.pdb

     文件     192566  2010-05-30 23:32  求三种闭包\Debug\www.exe

     文件     191424  2010-05-30 23:32  求三种闭包\Debug\www.ilk

     文件     213616  2010-05-30 22:37  求三种闭包\Debug\www.pch

     文件     443392  2010-05-30 23:32  求三种闭包\Debug\www.pdb

     文件     192571  2010-06-01 11:18  求三种闭包\Debug\三种闭包.exe

     文件     211300  2010-06-01 11:18  求三种闭包\Debug\三种闭包.ilk

     文件      17328  2010-06-01 11:18  求三种闭包\Debug\三种闭包.obj

     文件     213616  2010-06-01 10:41  求三种闭包\Debug\三种闭包.pch

     文件     451584  2010-06-01 11:18  求三种闭包\Debug\三种闭包.pdb

     文件       4255  2010-05-30 23:37  求三种闭包\www.dsp

     文件        512  2010-05-30 22:33  求三种闭包\www.dsw

     文件      33792  2010-05-30 23:37  求三种闭包\www.ncb

     文件      48640  2010-05-30 23:37  求三种闭包\www.opt

     文件       1263  2010-05-30 23:32  求三种闭包\www.plg

     文件       3920  2010-06-01 11:18  求三种闭包\三种闭包.cpp

     文件       3427  2010-06-01 10:41  求三种闭包\三种闭包.dsp

     文件        524  2010-06-01 12:08  求三种闭包\三种闭包.dsw

     文件      33792  2010-06-01 12:08  求三种闭包\三种闭包.ncb

     文件      48640  2010-06-01 12:08  求三种闭包\三种闭包.opt

     文件       1149  2010-06-01 11:18  求三种闭包\三种闭包.plg

     目录          0  2010-06-01 11:18  求三种闭包\Debug

     目录          0  2010-06-01 12:08  求三种闭包

----------- ---------  ---------- -----  ----

              2386159                    24


评论

共有 条评论