离散实验Word格式文档下载.docx
《离散实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《离散实验Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
输入两个数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
wrong"
printf("
a合取=%d\nb析取=%d\nc条件=%d\nd双条件=%d\n"
a,b,c,d);
}
五、运行结果
实验二关系闭包计算
熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。
从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,计算传递闭包时使用Warshall算法。
1根据要求用C语言进行编程。
#include<
iostream>
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<
n;
i++)
for(intj=0;
j<
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:
endl;
//自反闭包
for(inti1=0;
i1<
i1++)
{
for(intj1=0;
j1<
j1++)
{if(p[i1][j1]==0)
fan[i1][j1]=1;
elsefan[i1][j1]=0;
for(inti2=0;
i2<
i2++)//输出
for(intj2=0;
j2<
j2++)
cout<
fan[i2][j2]<
"
;
cout<
intdui[n][n]={0};
//对称闭包
duichenbibao:
for(inti3=0;
i3<
i3++)
for(intj3=0;
j3<
j3++)
dui[i3][j3]=p[j3][i3];
for(inti4=0;
i4<
i4++)//输出
for(intj4=0;
j4<
j4++)
dui[i4][j4]<
intchuan1[n][n]={0};
//warshall算法
chuandi1bibao:
for(intu=0;
u<
u++)
for(intf=0;
f<
f++)
chuan1[u][f]=p[u][f];
for(inti5=0;
i5<
i5++)
for(intj5=0;
j5<
j5++)
if(chuan1[j5][i5]==1)
for(intk=0;
k<
k++)
chuan1[j5][k]=chuan1[j5][k]||chuan1[i5][k];
for(inti6=0;
i6<
i6++)//输出
for(intj6=0;
j6<
j6++)
chuan1[i6][j6]<
intchuan2[n][n]={0};
//r+算法
chuandi2bibao:
for(intt=0;
t<
=n-2;
t++)
for(inti8=0;
i8<
i8++)
for(intj8=0;
j8<
j8++)
{chuan2[i8][j8]=0;
for(ints=0;
s<
s++)
chuan2[i8][j8]=chuan2[i8][j8]||(q[i8][s]*m[s][j8]);
for(inti=0;
for(intj=0;
{w[i][j]=w[i][j]||chuan2[i][j];
q[i][j]=chuan2[i][j];
for(inti7=0;
i7<
i7++)//输出
for(intj7=0;
j7<
j7++)
{if(w[j7][i7]!
=0)
chuan2[i7][j7]=1;
elsechuan2[i7][j7]=0;
cout<
chuan2[i7][j7]<
return0;
五、运行结果
实验三计算两结点间长度为m的路的数目
熟悉邻接矩阵和两结点间长度为m的路的数目的关系并编程计算。
从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。
考虑有向图和无向图。
用C语言实现。
实现可达性矩阵。
四、实验程序:
voidmain(void)
{
intx[10][10],r[10][10],q[10][10],l[10][10];
intp,m,n,i,j,k,g,h;
输入图的邻接矩阵的维数:
%d"
n);
输入结点两两长度m:
m);
输入图的邻接矩阵:
\n"
for(i=0;
for(j=0;
{
scanf("
x[i][j]);
r[i][j]=x[i][j];
}
for(p=1;
p<
m;
p++)
{
{
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<
g++)
{
for(h=0;
h<
h++)
r[g][h]=l[g][h];
}
结点之间两两长度为%d的路的数目矩阵如下:
m);
%d"
l[i][j]);
此图的可达性矩阵为:
for(i=0;
for(j=0;
{
r[i][j]=x[i][j];
q[i][j]=x[i][j];
for(p=0;
for(m=0;
m<
m++)
r[i][j]+=x[i][m]*r[m][j];
q[i][j]+=r[i][j];
if(q[i][j]>
0)
q[i][j]=1;
q[i][j]);
五、实验结果
实验四最优树的构造
熟悉最优树的构造算法,掌握最优树的构造过程。
从键盘输入一组权值,构造出对应的最优树,列出构造过程。
四、实验程序
intv,e,i,j,m,p,q,a,b,number=0;
intx[20][20],E[20],E1[20],row[20];
请输入树的结点数:
V="
v);
请输入树的边数:
E="
e);
请输入边e1-e%d权值:
e);
e;
scanf("
E[i]);
E1[i]=E[i];
//将边存储起来,便于之后排列边与结点的相互对应关系
row[i]=0;
请输入图的完全关联矩阵:
for(i=1;
=e;
e%d"
i);
=v;
printf("
v%d"
x[i-1][j]);
for(j=i+1;
if(E[i]>
E[j])
a=E[i];
//冒泡法排列权值
E[i]=E[j];
E[j]=a;
for(m=0;
v;
m++)//冒泡法排列整个完全关联矩阵
{
b=x[m][i];
x[m][i]=x[m][j];
x[m][j]=b;
}
按权值大小排列为:
%d"
E[i]);
i++)//记录每条边,调整边与结点的相对位置
if(E[i]==E1[j