1、离散实验 离 散 数 学实验报告学 院:计算机科学与软件学院指导老师:班 级:姓 名:学 号:实验 一 真值计算一、实验目的 熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。二、实验内容 从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。用C语言或MATLAB实现。三、实验步骤 1根据要求用C语言进行编程。 2 上机进行测试,看编程是否正确,并运行。四、源程序#include void main() int a,b,c,d,p,q; char T=1,F=0; printf(输入两个数p,q); scanf(%d,%d,&p,&q); if(p=F&q=F) a=
2、F,b=F,c=T,d=T; else if(p=F,q=T) a=F,b=T,c=T,d=F; else if(p=T,q=F) a=F,b=T,c=F,d=F; else if(p=T,q=T) a=T,b=T,c=T,d=T; else printf(wrong);printf(a合取=%dnb析取=%dnc条件=%dnd双条件=%dn,a,b,c,d); 五、运行结果 实验二 关系闭包计算一、实验目的 熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。二、实验内容 从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,计算传递闭包时使用Warshal
3、l算法。用C语言或MATLAB实现。三、实验步骤1根据要求用C语言进行编程。 2 上机进行测试,看编程是否正确,并运行。四、源程序#includeusing namespace std;int main() const n=4; int pnn=0,qnn=0,wnn=0,mnn=0; int a=0; for(int i=0;in;i+) for(int j=0;ja; pij=a; qij=a; wij=a; mij=a; int fannn=0;coutzi fan bi bao:endl;/自反闭包for(int i1=0;i1n;i1+) for(int j1=0;j1n;j1+)
4、if(pi1j1=0) fani1j1=1; else fani1j1=0; for(int i2=0;i2n;i2+)/输出 for(int j2=0;j2n;j2+) coutfani2j2 ; coutendl;int duinn=0;/对称闭包coutdui chen bi bao:endl;for(int i3=0;i3n;i3+) for(int j3=0;j3n;j3+) duii3j3=pj3i3; for(int i4=0;i4n;i4+)/输出 for(int j4=0;j4n;j4+) coutduii4j4 ; coutendl;int chuan1nn=0;/wars
5、hall算法coutchuan di1 bi bao:endl;for(int u=0;un;u+)for(int f=0;fn;f+)chuan1uf=puf;for(int i5=0;i5n;i5+) for(int j5=0;j5n;j5+) if(chuan1j5i5=1) for(int k=0;kn;k+) chuan1j5k=chuan1j5k|chuan1i5k;for(int i6=0;i6n;i6+)/输出 for(int j6=0;j6n;j6+) coutchuan1i6j6 ; coutendl;int chuan2nn=0;/r+算法coutchuan di2 bi
6、 bao:endl;for(int t=0;t=n-2;t+) for(int i8=0;i8n;i8+) for(int j8=0;j8n;j8+) chuan2i8j8=0; for(int s=0;sn;s+) chuan2i8j8=chuan2i8j8|(qi8s*msj8); for(int i=0;in;i+) for(int j=0;jn;j+) wij=wij|chuan2ij; qij=chuan2ij;for(int i7=0;i7n;i7+)/输出 for(int j7=0;j7n;j7+) if(wj7i7!=0) chuan2i7j7=1; else chuan2i7
7、j7=0; coutchuan2i7j7 ; coutendl; return 0;五、运行结果 实验三 计算两结点间长度为m的路的数目一、实验目的 熟悉邻接矩阵和两结点间长度为m的路的数目的关系并编程计算。二、实验内容从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。考虑有向图和无向图。用C语言实现。实现可达性矩阵。三、实验步骤1根据要求用C语言进行编程。 2 上机进行测试,看编程是否正确,并运行。四、实验程序:#include void main(void) int x1010,r1010,q1010,l1010; int p,m,n,i,j,k,g,h; print
8、f(输入图的邻接矩阵的维数:); scanf(%d,&n); printf(输入结点两两长度m:); scanf(%d,&m); printf(输入图的邻接矩阵:n); for(i=0;in;i+) for(j=0;jn;j+) scanf(%d,&xij); rij=xij; for(p=1;pm;p+) for(i=0;in;i+) for(j=0;jn;j+) qij=0; for(k=0;kn;k+) qij+=xik*rkj; lij=qij; for(g=0;gn;g+) for(h=0;hn;h+) rgh=lgh; printf(结点之间两两长度为%d的路的数目矩阵如下:n,m
9、); for(i=0;in;i+) for(j=0;jn;j+) printf(%d ,lij); printf(n); printf(此图的可达性矩阵为:n);for(i=0;in;i+) for(j=0;jn;j+) rij=xij; qij=xij; for(p=0;pn;p+) for(i=0;in;i+) for(j=0;jn;j+) for(m=0;mn;m+) rij+=xim*rmj; qij+=rij; for(i=0;in;i+) for(j=0;j0) qij=1; printf(%d ,qij); printf(n); 五、实验结果实验四 最优树的构造一、实验目的 熟悉
10、最优树的构造算法,掌握最优树的构造过程。二、实验内容从键盘输入一组权值,构造出对应的最优树,列出构造过程。用C语言实现。三、实验步骤1根据要求用C语言进行编程。 2 上机进行测试,看编程是否正确,并运行。四、实验程序#include void main(void) int v,e,i,j,m,p,q,a,b,number=0; int x2020,E20,E120,row20; printf(请输入树的结点数:V=); scanf(%d,&v); printf(请输入树的边数:E=); scanf(%d,&e); printf(请输入边e1-e%d权值:,e); for(i=0;ie;i+)
11、scanf(%d,&Ei); E1i=Ei; /将边存储起来,便于之后排列边与结点的相互对应关系 rowi=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;je;j+) scanf(%d,&xi-1j); for(i=0;ie;i+) for(j=i+1;jEj) a=Ei; / 冒泡法排列权值 Ei=Ej; Ej=a; for(m=0;mv;m+) / 冒泡法排列整个完全关联矩阵 b=xmi; xmi=xmj; xmj=b; printf(按权值大小排列为:n); for(i=0;ie;i+) printf( %d,Ei); printf(n); for(i=0;ie;i+) / 记录每条边,调整边与结点的相对位置 for(j=0;je;j+) if(Ei=E1j
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1