离散数学实验之求解关系的闭包运算

 

我自己写不这么好,说实在的,我也写不出来。这是老师给我们的一个代码。我把他在这上面保存下来,以后可能能用的到。

关系闭包运算
    1、输入构建关系的结点;
    2、程序对结点进行排序,以构造出符合人们表示习惯的关系矩阵;
    3、根据输入的结点输入关系的序偶;
    4、选择命令,执行相应计算。 

/**********************************************************************************
   ***********关系闭包运算***********
				1、输入构建关系的结点;
				2、程序对结点进行排序,以构造出符合人们表示习惯的关系矩阵;
				3、根据输入的结点输入关系的序偶;
				4、选择命令,执行相应计算。									  
***********************************************************************************/
#include
#include
#include
#define M  100

char *get_element(char *p)//输入结点序列函数
{
    printf("第一步:输入各个结点的名称后回车(不能有空格):");
    gets(p);
    fflush(stdin);
    return p;
}

void str_sort(char *point)//将结点重新按照其ASCII码排序,如d3jkab排列为3abdjk
                          //关系矩阵将根据此顺序来构造
{
    char *p=point,*q,t;
    int stlen=strlen(p);
    for(p=point;p*q){t=*p;*p=*q;*q=t;}
            printf("重新排序后的结点序列为:");
            for(p=point;*p;p++)putchar(*p);printf("\n"); //输出排序后的字符
}

int get_position(char ch,char *point)//函数返回字符(结点)ch在point中的位置
{
    int i;
    for(i=0;*(point+i);i++)
        if(*(point+i)==ch)
			return i;
}


void get_relation(int (*a)[M],char *p)//输入序偶根据第一与第二元素在结点序列中的位置将关系矩阵相应元素置1
{
    int k1,k2;
    char ch1,ch2;
    printf("第二步:输入关系的各个序偶(输入<*,*>时结束):\n");
    while(1)
    {
        printf("<");
        ch1=getche();
        printf(",");
        ch2=getche();
        printf(">\n");
        if(ch1=='*')break;
        k1=get_position(ch1,p);//取得第一元素在p中的位置序号
        k2=get_position(ch2,p);
        a[k1][k2]=1;
    }
}


void output_relat_array(int (*a)[M],int arry_w)//输出关系矩阵
{
    int i,j;
    for(i=0;i,",*(p+i),*(p+j));count++;}
    printf("\b}");
    printf("\n");
}

void Eq_closure(int (*a)[M],int arry_w,char *p)//利用关系矩阵主对角线元素全赋值为1求自反闭包
{
    int i,j;
    int eq[M][M];
    for(i=0;i

运行结果是:


你可能感兴趣的:(离散数学学习笔记)