离散数学上机实验报告材料Word下载.docx
《离散数学上机实验报告材料Word下载.docx》由会员分享,可在线阅读,更多相关《离散数学上机实验报告材料Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
p为1,q为0时为0,其他为1
等价:
p,q同真同假
2.程序代码:
#include<
stdio.h>
intmain()
{
intP,Q,a,b,c,d,p,q;
printf("
P的值"
);
for(P=0;
P<
2;
P++)
{
for(Q=0;
Q<
Q++)
printf("
\t%d"
P);
}
\nQ的值"
Q);
\n非P的值"
{
if(P==0)/*判断非P的值*/
p=1;
else
p=0;
p);
}
\n非Q的值"
if(Q==1)/*判断非Q的值*/
q=0;
q=1;
q);
\nP与Q的值"
if(Q==0||P==0)/*判断P与Q的值*/
a=0;
a=1;
a);
\nP或Q的值"
if(Q==1||P==1)/*判断P或Q的值*/
b=1;
b=0;
b);
\nP蕴含Q的值"
if(P==1&
&
Q==0)/*判断P蕴含Q的值*/
c=0;
c=1;
c);
\nP等价Q的值"
if(P==Q)/*判断P等价Q的值*/
d=1;
d=0;
d);
\n"
return0;
}
3.实验数据及结果分析:
实验二关系的复合运算及逆运算
熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。
利用矩阵求解有限集上的复合关系和逆关系。
三.实验过程
复合运算就将两个用矩阵表示的关系进行复合,即在第一个矩阵中寻找值为1的元素坐标(i,j),在第二个矩阵第j行寻找值为1的元素,若有,且坐标为(j,k),则产生的新的关系的矩阵中坐标为(i,k)的元素值为1。
逆运算就是将用矩阵中值为1的元素坐标(i,j)对调,产生新的关系的矩阵中坐标为(j,i)的元素值为1。
//关系的复合运算
iostream>
usingnamespacestd;
inta[100][100],b[100][100],c[100][100],i,j,k,n;
cout<
<
"
请输入集合X中元素的个数:
;
cin>
>
n;
请输入关系矩阵Mr的格式:
endl;
for(i=0;
i<
i++)
for(j=0;
j<
j++)
cin>
a[i][j];
请输入关系矩阵Ms的格式:
b[i][j];
i++)//进行复合运算
if(a[i][j]==1)
for(k=0;
k<
k++)
if(b[j][k]==1)
c[i][k]=1;
if(c[i][j]!
=1)
c[i][j]=0;
关系矩阵Mr与Ms的复合运算结果是:
cout<
c[i][j]<
"
cout<
//关系的逆运算
inta[100][100],b[100][100],n,i,j,index;
scanf("
%d"
&
n);
scanf("
a[i][j]);
i++)//进行逆运算
{
index=i;
i=j;
j=index;
b[i][j]=1;
}
if(b[i][j]!
b[i][j]=0;
}
\n关系矩阵Mrc为:
%d"
b[i][j]);
printf("
实验三
关系的闭包运算
熟悉关系的闭包运算,编程实现关系闭包运算算法。
利用矩阵求解有限集上给定关系的自反、对称和传递闭包。
在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;
对称闭包则加上关系的转置矩阵(逻辑加法);
传递闭包则直接根据t(R)=R+。
voiddeliver(intx[100][100],inty[100][100],intn);
inti,j,n,R[100][100],r[100][100],s[100][100],t[100][100];
请输入矩阵的阶:
endl<
请输入R的关系矩阵:
i++)//输入R的关系矩阵
R[i][j];
i++)//将R的关系矩阵赋值给r,s,t
{
r[i][j]=R[i][j];
s[i][j]=R[i][j];
t[i][j]=R[i][j];
i++)//自反闭包运算
if(r[i][i]==0)
r[i][i]=1;
自反闭包关系矩阵r(R):
i++)//输出r的关系矩阵
r[i][j]<
i++)//对称闭包运算
i;
if(s[i][j]==1||s[j][i]==1)
{
s[i][j]=1;
s[j][i]=1;
}
对称闭包关系矩阵s(R):
i++)//输出s的关系矩阵
s[i][j]<
deliver(t,R,n);
//关于传递闭包的函数
voiddeliver(intx[100][100],inty[100][100],intn)//关于传递闭包的函数
inti,j,k,m,z[100][100];
for(m=0;
m<
m++)
for(i=0;
i++)
for(j=0;
if(x[i][j]==1)
{
for(k=0;
if(y[j][k]==1)//进行复合运算
z[i][k]=1;
}
if(z[i][j]!
z[i][j]=0;
{
x[i][j]=x[i][j]+z[i][j];
//进行传递闭包运算
if(x[i][j]!
=0)
x[i][j]=1;
传递闭包关系矩阵t(R):
i++)//输出x的关系矩阵
x[i][j]<
实验四
图的矩阵表示
熟悉图的矩阵表示方法——邻接矩阵、可达矩阵和关联矩阵。
利用邻接矩阵得到的可达矩阵来求解图的连通性质。
可达矩阵表示图中任意两个节点间的可达关系,而邻接矩阵表示图中任意两个节点的邻接关系。
求解邻接矩阵
可知任意两个节点之间是否存在互相连通的路,从而判断是否可达。
voidmain()
inti,j,k,n,m,a[100][100],b[100][100],c[100][100],d[100][100];
请输入矩阵阶数:
请输入邻接矩阵a:
b[i][j]=a[i][j];
i++)//矩阵d为零矩阵
d[i][j]=0;
i++)//矩阵c为零矩阵
for(k=0;
for(i=0;
for(j=0;
c[k][i]=c[k][i]+b[k][j]*a[j][i];
//矩阵的乘法运算
b[i][j]=c[i][j];
d[i][j]=d[i][j]+b[i][j];
m为"
m+1<
矩阵b为:
cout<
b[i][j]<
}
if(d[i][j]!
d[i][j]=1;
可达矩阵d为:
d[i][j]<