离散数学上机实验报告Word格式文档下载.docx
《离散数学上机实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《离散数学上机实验报告Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
![离散数学上机实验报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/30/f10a42f9-869a-4bfd-81d5-8fe5c9ee6fe2/f10a42f9-869a-4bfd-81d5-8fe5c9ee6fe21.gif)
{
:
charp,q,t;
intp1,q1;
cout<
<
"
输入p,q的真值(F或T)"
endl;
cin>
>
p>
q;
if(p=='
F'
p1=0;
else
p1=1;
if(q=='
q1=0;
q1=1;
//下面进行为运算
if(p1|q1)
t='
T'
;
,
p析取q为"
t<
if(p1&
q1)
p和取q为"
if((!
p1)|q1)
|
p条件q为"
if(p1==q1)
·
p双条件q为"
}
实验二关系闭包计算
从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,传递闭包要求使用两种算法,即R+和Warshall算法。
实验源程序运行结果如下:
#include<
stdio.h>
inthe(int,int);
inta[100][100],b[100][100],c[100][100],d[100][100],I[100][100],i,j,k,n,m,p,q,t;
…
printf("
请输入关系矩阵的阶数\n"
);
scanf("
%d"
&
n);
请输入此关系矩阵\n"
for(i=0;
i<
n;
i++)
for(j=0;
j<
j++)
scanf("
a[i][j]);
选择1计算自反闭包...\n选择2计算对称闭包...\n选择3用R+计算传递闭包...\n选择4用washall计算传递闭包...\n计算结束后选择0退出\n"
t);
、
switch(t)
{
case1:
{
for(i=0;
{
for(j=0;
{
:
if(i==j)
I[i][j]=1;
elseI[i][j]=0;
}
}
-
b[i][j]=he(a[i][j],I[i][j]),printf("
%4d"
b[i][j]);
printf("
\n"
};
break;
case2:
for(i=0;
~
for(j=0;
b[j][i]=a[i][j];
printf("
对称闭包矩阵为\n"
c[i][j]=he(a[i][j],b[i][j]),printf("
c[i][j]);
printf("
}
case3:
for(j=0;
{
】
c[i][j]=a[i][j];
d[i][j]=a[i][j];
b[i][j]=0;
for(m=0;
m<
m++)
》
for(k=0;
k<
k++)
for(j=0;
b[i][k]=b[i][k]||(c[i][j]*a[j][k]);
}
}
《
for(p=0;
p<
p++)
for(q=0;
q<
q++)
c[p][q]=b[p][q];
;
d[p][q]=d[p][q]||b[p][q];
b[p][q]=0;
矩阵的传递闭包为\n"
!
printf("
d[i][j]);
printf("
};
(
case4:
for(k=0;
if(a[k][j]==1)
for(i=0;
a[k][i]=a[k][i]||a[j][i];
传递闭包为\n"
for(i=0;
a[i][j]);
default:
printf("
Error\n"
inthe(inta,intb)
intc;
if(a==0&
&
b==0)
c=0;
elsec=1;
returnc;
[
实验三计算两结点间长度为m的路的数目
从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。
考虑有向图和无向图。
【
实现可达性矩阵。
inta[100][100],b[100][100],c[100][100],d[100][100],i,j,k,t,p,q,n,m;
请输入路的长度\n"
m);
]
c[i][j]=a[i][j];
b[i][j]=0;
for(t=0;
m-1;
t++)
for(k=0;
b[i][j]+=c[i][k]*a[k][j];
for(k=0,i=0;
k+=c[i][j];
结点两两之间长度为%d的路的数目为%d\n"
m,k);
d[p][q]+=c[p][q];
该关系矩阵的可达型矩阵为\n"
¥
if(d[i][j]>
=1)d[i][j]=1;
elsed[i][j]=0;
\
实验四最优树的构造
从键盘输入一组权值,构造出对应的最优树,列出构造过程。
inta[100][100],d[100][100]={0};
inti,j,k,min,m,n,p;
intb[100][100]={0};
intc[100][100];
请输入邻接矩阵的阶数:
!
p);
p;
{printf("
请输入带权值矩阵的第%d行,用空格隔开:
i+1);
for(k=0;
p*p;
{min=100;
{if(a[i][j]==0)
continue;
elseif(a[i][j]<
min)
{min=a[i][j];
m=i,n=j;
}
a[m][n]=a[n][m]=0;
if(b[m][n]==1||b[n][m]==1)
continue;
d[m][n]=d[n][m]=1;
b[i][j]=d[i][j];
if(b[j][i]==1)
b[j][k]=b[j][k]||b[i][k];
if(d[i][j]==1)
d[i][j]=c[i][j];
最小生成树的邻接矩阵为(带权值):
{for(j=0;
%d"