《离散数学上机实验报告(共17页).doc》由会员分享,可在线阅读,更多相关《离散数学上机实验报告(共17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上离散数学实验报告 姓名: 学号: 班级:离散数学实验报告实验一 真值计算实验内容: 从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。用C语言实现。实验源程序和运行结果如下:#include iostream.hvoid main()char p,q,t;int p1,q1;cout输入p,q的真值(F或T)pq;if(p=F)p1=0;elsep1=1;if(q=F)q1=0;elseq1=1;/下面进行为运算if(p1|q1)t=T;elset=F;coutp析取q为tendl;if(p1&q1)t=T;elset=F;coutp和取q为te
2、ndl;if(!p1)|q1)t=T;elset=F;coutp条件q为tendl;if(p1=q1)t=T;elset=F;coutp双条件q为tendl;实验二 关系闭包计算实验内容: 从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,传递闭包要求使用两种算法,即R+和Warshall算法。用C语言实现。实验源程序运行结果如下:#includeint he(int,int);void main()int a100100,b100100,c100100,d100100,I100100,i,j,k,n,m,p,q,t;printf(请输入关系矩阵的阶数n);scanf(%d,&
3、n);printf(请输入此关系矩阵n);for(i=0;in;i+)for(j=0;jn;j+)scanf(%d,&aij);printf(选择1计算自反闭包.n选择2计算对称闭包.n选择3用R+计算传递闭包.n选择4用washall计算传递闭包.n计算结束后选择0退出n);scanf(%d,&t);switch(t)case 1:for(i=0;in;i+)for(j=0;jn;j+)if(i=j)Iij=1;else Iij=0; for(i=0;in;i+)for(j=0;jn;j+)bij=he(aij,Iij),printf(%4d,bij);printf(n);break;cas
4、e 2:for(i=0;in;i+)for(j=0;jn;j+)bji=aij;printf(对称闭包矩阵为n);for(i=0;in;i+)for(j=0;jn;j+)cij=he(aij,bij),printf(%4d,cij);printf(n); ;break;case 3: for(i=0;in;i+) for(j=0;jn;j+) cij=aij; dij=aij; bij=0; for(m=0;mn;m+)for(i=0;in;i+)for(k=0;kn;k+)for(j=0;jn;j+)bik=bik|(cij*ajk);for(p=0;pn;p+)for(q=0;qn;q+)
5、cpq=bpq;for(p=0;pn;p+)for(q=0;qn;q+)dpq=dpq|bpq;bpq=0;printf(矩阵的传递闭包为n);for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,dij);printf(n); ;break;case 4:for(j=0;jn;j+)for(k=0;kn;k+)if(akj=1)for(i=0;in;i+)aki=aki|aji; printf(传递闭包为n);for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,aij); printf(n);break;default:printf(Erro
6、rn);int he(int a,int b)int c;if(a=0&b=0)c=0;else c=1;return c;实验三 计算两结点间长度为m的路的数目实验内容:从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。考虑有向图和无向图。用C语言实现。实现可达性矩阵。实验源程序和运行结果如下:#includevoid main()int a100100,b100100,c100100,d100100,i,j,k,t,p,q,n,m;printf(请输入关系矩阵的阶数n);scanf(%d,&n);printf(请输入路的长度n);scanf(%d,&m);printf
7、(请输入此关系矩阵n);for(i=0;in;i+)for(j=0;jn;j+)scanf(%d,&aij);cij=aij;dij=aij;bij=0;for(t=0;tm-1;t+)for(i=0;in;i+)for(j=0;jn;j+)for(k=0;kn;k+)bij+=cik*akj;for(p=0;pn;p+)for(q=0;qn;q+)cpq=bpq;bpq=0;for(k=0,i=0;in;i+)for(j=0;jn;j+)k+=cij;printf(结点两两之间长度为%d的路的数目为%dn,m,k);for(t=0;tn;t+)for(i=0;in;i+)for(j=0;jn
8、;j+)for(k=0;kn;k+)bij+=cik*akj;for(p=0;pn;p+)for(q=0;qn;q+)cpq=bpq;bpq=0;dpq+=cpq;printf(该关系矩阵的可达型矩阵为n);for(i=0;in;i+)for(j=0;j=1) dij=1;else dij=0;printf(%4d,dij);printf(n);实验四 最优树的构造实验内容: 从键盘输入一组权值,构造出对应的最优树,列出构造过程。用C语言实现。实验源程序和运行结果如下:#includevoid main() int a100100,d100100=0;int i,j,k,min,m,n,p;i
9、nt b100100=0;int c100100;printf(请输入邻接矩阵的阶数:); scanf(%d,&p);for(i=0;ip;i+)printf(请输入带权值矩阵的第%d行,用空格隔开:,i+1); for(j=0;jp;j+)scanf(%d,&aij);for(i=0;ip;i+)for(j=0;jp;j+)cij=aij;for(k=0;kp*p;k+) min=100;for(i=0;ip;i+)for(j=0;jp;j+)if(aij=0) continue;else if(aijmin)min=aij; m=i,n=j; amn=anm=0;if(bmn=1|bnm=1)continue; dmn=dnm=1; for(i=0;ip;i+) for(j=0;jp;j+)bij=dij; for(i=0;ip;i+) for(j=0;jp;j+) if(bji=1)for(k=0;kp;k+) bjk=bjk|bik; for(i=0;ip;i+) for(j=0;jp;j+)if(dij=1)dij=cij;printf(最小生成树的邻接矩阵为(带权值):n); for(i=0;ip;i+)for(j=0;jp;j+)printf(%d ,dij);printf(n);专心-专注-专业
限制150内