离散数学二元关系传递性判别、闭包方法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散数学二元关系传递性判别、闭包方法实验报告
学院:理学院班级:11信息与计算科学1班
姓名:*** 学号:*************
一、实验目的
1. 通过上机程序,进一步加深对二元关系传递性判别,自反闭包,对称闭包,传递闭
包的理解。
2. 掌握传递性判别,Warshall算法。
3. 学会用程序解决离散数学中的问题。
4. 增强我们编写程序的能力
二、实验内容
实验1:二元关系传递性判别
实验2:有限集上给定关系的自反、对称和传递闭包(用Warshall算法)。
三、实验环境
在microsoft visual c++实验环境下完成的,而所设计的程序也在这个环境下通过了编译,运行和测试。
四、实验原理和实现过程
实验1:
#include
using namespace std;
void main()
{
int n,i,j,k;
int m=0; //m是判断传递关系计数参数
cout<<"请输入矩阵的行列数n:";
cin>>n;
int a[20][20];
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cout<<"请输入a["<
cin>>a[i][j];
}
} //输入R矩阵
cout<<"R的关系矩阵为:"< for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout< } cout< } //输出R矩阵 for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]!=0) { for(k=1;k<=n;k++) { if(a[i][k] { m=m+1; //如果有一个数不成立,m加1 } } } } } if(m==0) cout<<"R有传递关系"< else cout<<"R没有传递关系"< } 实验2: 1)自反闭包 #include using namespace std; void main() { int n,i,j; cout<<"请输入矩阵的行列数n:"; cin>>n; int a[20][20]; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout<<"请输入a["< cin>>a[i][j]; } } cout<<"R的关系矩阵为:"< for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout< } cout< } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]!=0) { a[i][i]=1; a[j][j]=1; //把符合条件的对角线上的值改为1 } } } cout<<"R的关系矩阵为:"< for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout< } cout< } } 2)对称闭包 #include using namespace std; void main() { int n,i,j; cout<<"请输入矩阵的行列数n:"; cin>>n; int a[20][20]; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout<<"请输入a["< cin>>a[i][j]; } } cout<<"R的关系矩阵为:"< for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout< } cout< } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]!=0) { a[j][i]=1; //对称元素的值改为1 } } } cout<<"R的对称闭包矩阵为:"< for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout< } cout< } } 3)传递闭包 #include using namespace std; void main() { int n,i,j,k; int m=0;