离散实验.docx

上传人:b****2 文档编号:2271237 上传时间:2022-10-28 格式:DOCX 页数:15 大小:80.56KB
下载 相关 举报
离散实验.docx_第1页
第1页 / 共15页
离散实验.docx_第2页
第2页 / 共15页
离散实验.docx_第3页
第3页 / 共15页
离散实验.docx_第4页
第4页 / 共15页
离散实验.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

离散实验.docx

《离散实验.docx》由会员分享,可在线阅读,更多相关《离散实验.docx(15页珍藏版)》请在冰豆网上搜索。

离散实验.docx

离散实验

离散数学

 

学院:

计算机科学与软件学院

指导老师:

班级:

姓名:

学号:

 

实验一真值计算

一、实验目的

熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。

二、实验内容

从键盘输入两个命题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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1