离散实验.docx
- 文档编号:2271237
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:15
- 大小:80.56KB
离散实验.docx
《离散实验.docx》由会员分享,可在线阅读,更多相关《离散实验.docx(15页珍藏版)》请在冰豆网上搜索。
离散实验
离散数学
实
验
报
告
学院:
计算机科学与软件学院
指导老师:
班级:
姓名:
学号:
实验一真值计算
一、实验目的
熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。
二、实验内容
从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。
用C语言或MATLAB实现。
三、实验步骤
1根据要求用C语言进行编程。
2上机进行测试,看编程是否正确,并运行。
四、源程序
#include
voidmain()
{
inta,b,c,d,p,q;
charT=1,F=0;
printf("输入两个数p,q");
scanf("%d,%d",&p,&q);
if(p==F&q==F)
a=F,b=F,c=T,d=T;
elseif(p==F,q==T)
a=F,b=T,c=T,d=F;
elseif(p==T,q==F)
a=F,b=T,c=F,d=F;
elseif(p==T,q==T)
a=T,b=T,c=T,d=T;
else
printf("wrong");
printf("a合取=%d\nb析取=%d\nc条件=%d\nd双条件=%d\n",a,b,c,d);
}
五、运行结果
实验二关系闭包计算
一、实验目的
熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。
二、实验内容
从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,计算传递闭包时使用Warshall算法。
用C语言或MATLAB实现。
三、实验步骤
1根据要求用C语言进行编程。
2上机进行测试,看编程是否正确,并运行。
四、源程序
#include
usingnamespacestd;
intmain()
{
constn=4;
intp[n][n]={0},q[n][n]={0},w[n][n]={0},m[n][n]={0};
inta=0;
for(inti=0;i { for(intj=0;j { cin>>a; p[i][j]=a; q[i][j]=a; w[i][j]=a; m[i][j]=a; } } intfan[n][n]={0}; cout<<"zifanbibao: "< for(inti1=0;i1 { for(intj1=0;j1 {if(p[i1][j1]==0) fan[i1][j1]=1; elsefan[i1][j1]=0;} } for(inti2=0;i2 { for(intj2=0;j2 cout< cout< } intdui[n][n]={0};//对称闭包 cout<<"duichenbibao: "< for(inti3=0;i3 { for(intj3=0;j3 dui[i3][j3]=p[j3][i3]; } for(inti4=0;i4 { for(intj4=0;j4 cout< cout< } intchuan1[n][n]={0};//warshall算法 cout<<"chuandi1bibao: "< for(intu=0;u for(intf=0;f chuan1[u][f]=p[u][f]; for(inti5=0;i5 for(intj5=0;j5 if(chuan1[j5][i5]==1) for(intk=0;k chuan1[j5][k]=chuan1[j5][k]||chuan1[i5][k]; for(inti6=0;i6 { for(intj6=0;j6 { cout< } cout< } intchuan2[n][n]={0};//r+算法 cout<<"chuandi2bibao: "< for(intt=0;t<=n-2;t++) { for(inti8=0;i8 for(intj8=0;j8 {chuan2[i8][j8]=0; for(ints=0;s chuan2[i8][j8]=chuan2[i8][j8]||(q[i8][s]*m[s][j8]);} for(inti=0;i for(intj=0;j {w[i][j]=w[i][j]||chuan2[i][j]; q[i][j]=chuan2[i][j];} } for(inti7=0;i7 { for(intj7=0;j7 {if(w[j7][i7]! =0) chuan2[i7][j7]=1; elsechuan2[i7][j7]=0; cout< cout< } return0; } 五、运行结果 实验三计算两结点间长度为m的路的数目 一、实验目的 熟悉邻接矩阵和两结点间长度为m的路的数目的关系并编程计算。 二、实验内容 从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。 考虑有向图和无向图。 用C语言实现。 实现可达性矩阵。 三、实验步骤 1根据要求用C语言进行编程。 2上机进行测试,看编程是否正确,并运行。 四、实验程序: #include voidmain(void) { intx[10][10],r[10][10],q[10][10],l[10][10]; intp,m,n,i,j,k,g,h; printf("输入图的邻接矩阵的维数: "); scanf("%d",&n); printf("输入结点两两长度m: "); scanf("%d",&m); printf("输入图的邻接矩阵: \n"); for(i=0;i { for(j=0;j { scanf("%d",&x[i][j]); r[i][j]=x[i][j]; } } for(p=1;p { for(i=0;i for(j=0;j { q[i][j]=0; for(k=0;k q[i][j]+=x[i][k]*r[k][j]; l[i][j]=q[i][j]; } for(g=0;g { for(h=0;h r[g][h]=l[g][h]; } } printf("结点之间两两长度为%d的路的数目矩阵如下: \n",m); for(i=0;i { for(j=0;j printf("%d",l[i][j]); printf("\n"); } printf("此图的可达性矩阵为: \n"); for(i=0;i { for(j=0;j { r[i][j]=x[i][j]; q[i][j]=x[i][j]; } } for(p=0;p for(i=0;i for(j=0;j { for(m=0;m r[i][j]+=x[i][m]*r[m][j]; q[i][j]+=r[i][j]; } for(i=0;i { for(j=0;j { if(q[i][j]>0) q[i][j]=1; printf("%d",q[i][j]); } printf("\n"); } } 五、实验结果 实验四最优树的构造 一、实验目的 熟悉最优树的构造算法,掌握最优树的构造过程。 二、实验内容 从键盘输入一组权值,构造出对应的最优树,列出构造过程。 用C语言实现。 三、实验步骤 1根据要求用C语言进行编程。 2上机进行测试,看编程是否正确,并运行。 四、实验程序 #include voidmain(void) { intv,e,i,j,m,p,q,a,b,number=0; intx[20][20],E[20],E1[20],row[20]; printf("请输入树的结点数: V="); scanf("%d",&v); printf("请输入树的边数: E="); scanf("%d",&e); printf("请输入边e1-e%d权值: ",e); for(i=0;i { scanf("%d",&E[i]); E1[i]=E[i];//将边存储起来,便于之后排列边与结点的相互对应关系 row[i]=0; } printf("请输入图的完全关联矩阵: \n"); printf(""); for(i=1;i<=e;i++) printf("e%d",i); printf("\n"); for(i=1;i<=v;i++) { printf("v%d",i); for(j=0;j scanf("%d",&x[i-1][j]); } for(i=0;i for(j=i+1;j { if(E[i]>E[j]) { a=E[i];//冒泡法排列权值 E[i]=E[j]; E[j]=a; for(m=0;m { b=x[m][i]; x[m][i]=x[m][j]; x[m][j]=b; } } } printf("按权值大小排列为: \n"); for(i=0;i printf("%d",E[i]); printf("\n"); for(i=0;i { for(j=0;j { if(E[i]==E1[j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)