离散数学实验安排及题目

合集下载

离散数学上机实验指导

离散数学上机实验指导

离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至xfs@。

实验11实验内容(1)求任意一个命题公式的真值表。

(2)利用真值表求任意一个命题公式的主范式。

(3)利用真值表进行逻辑推理。

注:(2)和(3)可在(1)的基础上完成。

2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。

例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。

本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。

目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。

3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。

真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。

n个命题变元的每组赋值的生成算法可基于这种思想。

含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。

为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、&、|、-、+来表示。

算符之间的优先关系如表1-32所示:为实现算符优先算法,另一个称作OPND,用以寄存操作数或运算结果。

算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。

实验21实验内容(1)求任意两个集合的交集、并集、差集。

(2)求任意一个集合的幂集。

离散数学实验三

离散数学实验三

实验报告(2014 / 2015 学年第一学期)课程名称离散数学实验名称偏序关系中盖住关系的求取及格论中有补格的判定实验时间2014 年11 月28 日指导单位南京邮电大学指导教师罗卫兰学生姓名沈一州班级学号B12040920学院(系) 计算机软件学院专业NIIT(软嵌)实验报告实验名称偏序关系中盖住关系的求取及格论中有补格的判定指导教师罗卫兰实验类型 Windows+VC 实验学时 4 实验时间 11.28 一、实验目的和要求内容:编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格。

cout<<"因为"<<a[i]<<"∨("<<a[j]<<"∧"<<a[k]<<")!=("<<a[i]<<"∨"<<a[j]<<")∧("<<a[i]<<"∨"<<a[k]<<"),所以这不是一个布尔格。

\n";//验证a∨(b∧c)==(a∨b) ∧ (a∨c)break;}}if(flag)break;}if(flag)break;}if(!flag)cout<<"因为所有成员都满足分配性,所以这是一个分配格。

\n";四、运行结果:首先是输入界面:然后输入24:然后询问是否再次输入:这次输入99:特殊情况,若输入0或者负数:此时会一直提示输入错误直到输入成功。

若输入1:若输入非Y,则退出程序:实验报告五、实验小结这次题目要求是根据整除关系建立偏序关系,集合由一个正整数的因子所构成,所以该偏序集中的最大下界为1,最小上界为该正整数,所以该偏序集是一个格。

离散数学实验报告

离散数学实验报告

大连民族学院计算机科学与工程学院实验报告实验题目:判断关系的性质课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:班级:学生姓名:学号:实验日期:年月日实验地点:实验学时:实验成绩:指导教师签字:年月日实验报告正文部分(具体要求详见实验报告格式要求)实验报告格式[实验题目] 判断关系的性质[实验目的] 使学生掌握利用计算机语言实现判断关系性质的基本方法。

[实验环境] Microsoft Visual C++6.0[实验原理]实验内容与要求:对给定表示有穷集上关系的矩阵,确定这个关系是否是自反的或反自反的;对称的或反对称的;是否传递的。

通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。

图示:程序源代码:#include<stdio.h>#define N 4main(){int i,j,k;int f,e,z;int M[N][N];printf("判断R是否为自反关系、对称关系、是否可传递?\n"); printf("请输入一个4*4的矩阵。

\n");for(i=0;i<N;i++) /*输入一个4*4的矩阵*/for(j=0;j<N;j++)scanf("%d",&M[i][j]);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",M[i][j]);printf("\n");}for(i=0;i<N;i++){if(M[i][i]==1)//判断自反性{if(i==N-1)e=0;else;}else if(M[i][i]==0)//判断反自反性 {if(i==N-1)e=1;else;}else{e=2;break;}}for(i=0;i<N;i++){for(j=0;j<N;j++)if(M[i][j]!=M[j][i])//判断对称性{ f=1;break;}}for(i=0;i<N;i++){for(j=0;j<N;j++)if(M[i][j]==1)//判断反对称性{if(M[j][i]==0){if(i==(N-1)&&j==N-1) f=0;elsebreak;}}}if(f!=0&&f!=1){f=2;}for(i=0;i<N;i++)//判断可传递性for(j=0;j<N;j++)if(M[i][j]==1)continue;elsefor(k=0;k<N;k++)if(M[i][k]*M[k][i]==0) continue;elsez=0; if(e==0)printf("关系R是自反关系\n");else if(e==1)printf("关系R是反自反关系\n");else if(e==2)printf("关系R是反自反关系\n");if(f==0)printf("关系R是反对称关系\n");else if(f==1)printf("关系R不是对称关系\n");else if(f==2)printf("关系R是对称关系\n");if(z==0)printf("关系R是不可传递关系\n"); elseprintf("关系R是可传递关系\n");}[实验步骤]和[实验记录] 程序运行截图:i、程序启动截图:ii、程序输入截图:ii、程序运行结果截图:实验总结:实验简洁高效地判断二元关系的性质。

离散数学上机实验报告

离散数学上机实验报告
实验三、用沃尔算法求传递闭包
一、实验内容
从键盘输入二元关系用沃尔算法求出它的传递闭包,并输出。
二、实验步骤
熟悉沃尔算法,然后将其用程序编写出来,任意输入二元关系,观察程序运行结果,
用另一种算法算出结果,与其比较,调试程序。
三、实验代码
#include<stdio.h>
int main()
{
int n,i,j,k,a[10][10];
printf("﹁q=0\n");
printf("p∧q=1\n");
printf("p∨q=1\n");
printf("p→q=1\n");
printf("p<->q=1\n");
}
continue;
}
if('n'==t)
break;
}
return 0;
}
四、实验体会
求真值运算中,应注意各种连接词的试用方法,以及其在不同情况下的真值。
printf("\n");
}
return 0;
}
四、实验体会
熟悉并使用沃尔算法,关系矩阵中只有0和1,所以用沃尔算法求得的数若大于1,应该返回1,其余不变。
实验四、三种闭包运算
一、实验内容
从键盘输入一个二元关系,求它的自反闭包,对称闭包,传递闭包,并输出。
二、实验步骤
编写程序,从键盘输入一个二元关系,当求传递闭包时,试与沃尔算法的传递闭包做比较,观察程序运行结果,调试程序。
char t;
while(t)
{
printf("是否运算程序(y/n):\n");

离散数学集合的运算实验报告

离散数学集合的运算实验报告

大连民族学院计算机科学与工程学院实验报告实验题目:集合的运算课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:网络工程班级:网络111班学生姓名:张山学号:2011083123实验日期:2013年12月22日实验地点:I区实验机房实验学时:8小时实验成绩:指导教师签字:年月日老师评语:1实验题目:集合的运算实验原理:1、实验内容与要求:实验内容:本实验求两个集合间的运算,给定两个集合A、B,求集合A与集合B之间的交集、并集、差集、对称差集和笛卡尔乘积。

实验要求:对于给定的集合A、B。

用C++/C语言设计一个程序(本实验采用C++),该程序能够完成两个集合间的各种运算,可根据需要选择输出某种运算结果,也可一次输出所有运算结果。

2、实验算法:实验算法分为如下几步:(1)、设计整体框架该程序采取操作、打印分离(求解和输出分开)的思想。

即先设计函数求解各部分运算并将相应结果传入数组(所求集合)中,然后根据需要打印运算结果。

(2)、建立一个集合类(Gather)类体包括的数组a、b、c、d、e、f、g分别存储集合A、B以及所求各种运算的集合。

接口(实现操作的函数)包括构造函数,菜单显示函数,求解操作函数,打印各种运算结果等函数。

(3)、设计类体中的接口构造函数:对对象进行初始化,建立集合A与集合B。

菜单显示函数:设计提示选项,给使用者操作提示。

操作函数:该函数是程序的主题部分,完成对集合的所有运算的求解过程,并将结果弹入(存入)对应数组(集合)中,用于打印。

具体操作如下:21*求交集:根据集合中交集的定义,将数组a、b中元素挨个比较,把共同元素选出来,并存入数组c(交集集合)中,即求得集合A、B的交集。

2*求并集:根据集合中并集的定义,先将数组a中元素依次存入数组g(并集集合)中,存储集合A中某元素前,先将其与已存入g中的元素依次比较,若相同则存入下一个元素,否则直接存入g中,直到所有A中元素存储完毕。

离散数学实验报告.doc

离散数学实验报告.doc

计算机科学与工程学院实验报告实验题目:判断关系R的性质课程名称:离散数学实验类型:□演示性□验证性专业: 班级:学生姓名:学号:实验日期:2011年12年19日实验地点:实验学时:实验成绩:指导教师签字:2011年12月25日实验题目:判断关系R的性质实验原理:1.自反与反自反性质从给定的关系矩阵来断判关系R是否为自反是很容易的。

若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。

本算法可以作为判等价关系算法的子程序给出。

2.对称与反对称性质若M(R的关系矩阵)为对称矩阵,则R是对称关系;若M为反对称矩阵,则R是反对称关系。

判断对称性,对于i=2,3,….,n;j=1,2,……,i-1,若存在m ij=m ji,则R是对称的;3.传递性质一个关系R的可传递性定义告诉我们,若关系R是可传递的,则必有:m ik=1∧m kj=1⇒ m ij=1。

这个式子也可改写成为: m ij=0⇒ m ik=0∨m kj=0。

我们可以根据后一个公式来完成判断可传递性这一功能的。

可传递性也是等价关系的必要条件,所以,本算法也可以作为判等价关系算法的子程序给出。

实验要求:写出类c的算法并编写一个程序判断给定集合上的关系是否为自反的。

写出类c的算法并编写一个程序判断给定集合上的关系是否为对称的。

写出类c的算法并编写一个程序判断给定集合上的关系是否为传递的。

实验流程图:NY实验中用到的函数:input(); //输入矩阵函数judge(); //判断输入矩阵是否正确函数 analagmatic(); //判断自反关系函数 symmetric(); //判断对称关系函数 transmit(); // 判断传递关系函数 开始输入n 阶矩阵M 输入矩阵各元素的值 判断出矩阵的自反性、对称性、传递性。

离散数学(集合的运算)实验报告

离散数学(集合的运算)实验报告

大连民族学院计算机科学与工程学院实验报告实验题目:集合的运算课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:网络工程班级:网络111班学生姓名:张山学号:2011083123实验日期:2013年12月22日实验地点:I区实验机房实验学时:8小时实验成绩:指导教师签字:年月日老师评语:实验题目:集合的运算实验原理:1、实验内容与要求:实验内容:本实验求两个集合间的运算,给定两个集合A、B,求集合A与集合B之间的交集、并集、差集、对称差集和笛卡尔乘积。

实验要求:对于给定的集合A、B。

用C++/C语言设计一个程序(本实验采用C++),该程序能够完成两个集合间的各种运算,可根据需要选择输出某种运算结果,也可一次输出所有运算结果。

2、实验算法:实验算法分为如下几步:(1)、设计整体框架该程序采取操作、打印分离(求解和输出分开)的思想。

即先设计函数求解各部分运算并将相应结果传入数组(所求集合)中,然后根据需要打印运算结果。

(2)、建立一个集合类(Gather)类体包括的数组a、b、c、d、e、f、g分别存储集合A、B以及所求各种运算的集合。

接口(实现操作的函数)包括构造函数,菜单显示函数,求解操作函数,打印各种运算结果等函数。

(3)、设计类体中的接口构造函数:对对象进行初始化,建立集合A与集合B。

菜单显示函数:设计提示选项,给使用者操作提示。

操作函数:该函数是程序的主题部分,完成对集合的所有运算的求解过程,并将结果弹入(存入)对应数组(集合)中,用于打印。

具体操作如下:1*求交集:根据集合中交集的定义,将数组a、b中元素挨个比较,把共同元素选出来,并存入数组c(交集集合)中,即求得集合A、B的交集。

2*求并集:根据集合中并集的定义,先将数组a中元素依次存入数组g(并集集合)中,存储集合A中某元素前,先将其与已存入g中的元素依次比较,若相同则存入下一个元素,否则直接存入g中,直到所有A中元素存储完毕。

离散数学试验报告

离散数学试验报告

离散数学实验报告姓名:学号:班级:实验地点:实验时间:Word文档1实验目的和要求运用最小生成树思想和求最小生成树程序解决实际问题。

实际问题描述如下:八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km。

问从海岸经1 号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)?「到 2 3 4 5 6 7 81 1.3 2.1 0.9 0.7 1.8 2.0 1.820.9 1.8 1.2 2.8 2.3 1.13 2.6 1.7 2.5 1.9 1.040.7 1.6 1.5 0.950.9 1.1 0.860.6 1.070.52实验环境和工具实验环境:Windows 7旗舰版工具:Dev-C++ 5.8.33实验过程3.1算法流程1Word i=0;j=0;惠档exnum=8;结束3.2程序核心代码〃油管铺设问题Prim 算法实现#include <iostream> #include<iomanip> using namespace std; #define MAXV 10#define INF 32767 //INF 表示8 typedef int InfoType; typedef struct{int no; InfoType info; } VertexType;typedef struct{〃图的定义float edges[MAXV][MAXV]; 〃邻接矩阵 int vexnum;//顶点数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph;//图的邻接矩阵类型〃顶点编号 //顶点其他信息 〃顶点类型Word文档/*输出邻接矩阵g*/void DispMat(MGraph g){int i,j;for (i=0;i<g.vexnum;i + +){for (j=0;j<g.vexnum;j + +)if (g.edges[i][j] = = INF)cout<<setw⑹<<“8";elsecout<<setw(6)<<g.edges[i][j];cout<<endl;))void prim(MGraph g,int v){ //从顶点V0 出发,按Prim 算法构造G的最小生成树//输出最小生成树的每条边及其权值float Vlength[MAXV];int i, j, k;int cloest[MAXV];float min;float sum = 0.0;Word文档for(i=0;i<g.vexnum;i ++){Vlength[i]=g.edges[v][i];cloest[i]=v;)for(i = 1;i<g.vexnum;i + +){min = INF; //min为其中最大的一条边二MAXVfor(j=0;j<g.vexnum;j + +){〃找n-1 条边if(Vlength[j]!=0&&Vlength[j]<min){min=Vlength[j];k=j;))cout<<" 连接油<”<<cloest[k] + 1<<”,”<<k+1<<">"<<“ 长度为:"<<min<<endl;sum + = min;Vlength[k]=0;Vlength[cloest[k]]=0;for(j=0;j<g.vexnum;j + +){ 〃选择当前代价最小的边if(g.edges[k][j]!=0&&g.edges[k][j]<Vlength[j]){Vlength[j]=g.edges[k][j];cloest[j]=k;Word文档)cout<<"管道总长度为:"<<sum<<endl;)int main()(int i,j,u=3;MGraph g;float A[MAXV][10];g.vexnum=8;for (i=0;i<g.vexnum;i + +)for (j=0;j<g.vexnum;j + +)A[i][j] = INF;A[0][1] = 1.3; A[0][2]=2.1; A[0][3]=0.9;A[0][4]=0.7; A[0][5] = 1.8; A[0][6]=2.0;A[0][7] = 1.8; A[1][2]=0.9; A[1][3] = 1.8;A[1][4] = 1.2; A[1][5]=2.8; A[1][6]=2.3;A[1][7] = 1.1; A[2][3]=2.6; A[2][4] = 1.7;A[2][5]=2.5; A[2][6] = 1.9; A[2][7] = 1.0;A[3][4]=0.7; A[3][5] = 1.6; A[3][6] = 1.5;A[3][7]=0.9; A[4][5]=0.9; A[4][6] = 1.1;Word文档A[4][7]=0.8; A[5][6]=0.6; A[5][7] = 1.0;A[6][7]=0.5;for (i=0;i<g.vexnum;i + +)for (j=0;j<g.vexnum;j + +)A[j][i]=A[i][j];for (i=0;i<g.vexnum;i + +) /*建立图的邻接矩阵*/ for (j=0;j<g.vexnum;j + +)g.edges[i][j]=A[i][j];cout<<endl;cout<<”各油井间距离:\n";DispMat(g);cout<<endl;cout<<"最优铺设方案:\n";prim(g,0);cout<<endl;return 0;)3.3运行结果Word文档exited after O.06836 seconds 3.4 运行结果分析程序实现了输出需要铺设管道的油井编号,并给出了每条管道长度以及总长度,基 本实现了题目要求。

中南大学离散数学实验报告(实验1abc)

中南大学离散数学实验报告(实验1abc)

“离散数学”实验报告(实验1ABC)专业班级学号姓名日期:2011.12.05目录一、实验目的 (3)二、实验内容 (3)三、实验环境 (3)四、实验原理和实现过程(算法描述) (3)1、实验原理 (3)2、实验过程 (4)五、实验数据及结果分析 (7)A题型 (7)B、C题型 (9)六、源程序清单 (13)A题部分源代码 (13)B、C题部分源代码 (14)七、其他收获及体会 (22)一、实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。

二、实验内容1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。

(A)2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C))三、实验环境C或C++语言编程环境实现。

四、实验原理和实现过程(算法描述)1.实验原理(1)合取:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P∧Q, 读作P、Q的合取, 也可读作P与Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = T, Q = T时方可P∧Q =T, 而P、Q只要有一为F则P∧Q = F。

这样看来,P∧Q可用来表示日常用语P与Q, 或P并且Q。

(2)析取:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P∨Q, 读作P、Q的析取, 也可读作P或Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = F, Q = F时方可P∨Q =F, 而P、Q只要有一为T则P∨Q = T。

这样看来,P∨Q可用来表示日常用语P或者Q。

(3)条件:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P→Q, 读作P条件Q, 也可读作如果P,那么Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = T, Q = F时方可P→Q =F, 其余均为T。

(4)双条件:二元命题联结词。

离散数学实验指导书(附带模板)

离散数学实验指导书(附带模板)

《离散数学》实验指导书一、实验目的《离散数学》是现代数学的一个重要分支,是计算机科学与技术专业的基础理论课,也是该专业的核心课程和主干课程。

“离散数学”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。

该课程一方面为后继课程如数据结构、编绎原理、操作系统、数据库原理、人工智能和形式语言与自动机等提供必要的理论基础;同时,更为重要的是培养学生的抽象思维能力和逻辑推理能力,为今后的学习和工作打好基础。

无论从计算机学科发展的过去、现在和未来看,《离散数学》都是计算机科学与技术专业不可缺少的重要组成部分。

这门课程有着其它课程不可替代的地位和作用,是一门承前启后的课程。

根据《离散数学》课程本身的理论性较强的特性,为了帮助学生更好地学习本课程,理解和掌握所学基本概念和方法,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,设置实践环节十分重要。

通过实验实践内容的训练,突出逻辑性思维训练的特征, 目的是学习离散数学中的基本算法和方法,掌握数理逻辑、关系和图论中的基本算法,提高学生学习的兴趣及实际动手的能力。

通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所学知识,培养分析、解决实际问题的能力。

二、实验要求掌握真值表技术,熟悉联结词合取、析取、条件和双条件的概念。

熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。

熟悉邻接矩阵和两结点间长度为m 的路的数目的关系。

熟悉最优树的构造算法,掌握最优树的构造过程。

实验前作好准备,分析问题并确定算法,设计代码。

做实验过程中认真分析和调试程序,记录并分析实验结果。

实验后完成实验报告,实验报告包括实验目的、实验内容、源程序、运行结果及分析。

可以使用C、VC或MATLAB完成实验。

实验题目包括真值计算、关系闭包计算、计算两结点间长度为m的路的数目、最优树的构造四个实验,每个实验要求2个学时完成。

三、实验设备及环境PC机一台,软件C、VC或MATLAB四、实验内容实验一真值计算1、实验目的熟悉五个常用联结词合取、析取、条件和双条件的概念,掌握真值表技术。

离散数学实验

离散数学实验

实验一油管铺设
实验准备
最小生成树问题,求最小生成树的Prim算法
实验目的
运用最小生成树思想和求最小生成树程序解决实际问题
实验过程
八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km。

问从海岸经1号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)?
实验二最短路问题
实验准备
图的邻接矩阵,求最短路的Dijkstra算法
实验目的
运用最短路思想和求最短路程序解决实际问题
实验过程
某建筑公司签订了一项合同,要为一家制造公司建造一座新的加工厂。

合同规定工厂的完工期限为12个月。

要是工厂不能在一年内完工,就要赔款,因此建筑公司认真分析,找出建筑工厂必须完成的各道工序和这些工序之间的先后关系,并估计出它们延续的时间,如下表所示。

为建筑公司制定工程完工计划提供理论依据。

实验三中国邮递员问题
实验准备
欧拉图,中国邮递员问题(G是欧拉图;G不是欧拉图:G正好有两个奇次顶点,G有2n 个奇次顶点n≥2)
实验目的
通过程序实现中国邮递员问题,强化其基本思想和实际应用
实验过程
针对下图所示加权图G,给出中国邮递员问题的解决方案。

实验四旅行推销商问题
实验准备
哈密顿图,旅行推销商问题
实验目的
通过程序实现旅行推销商问题,强化其基本思想和实际应用,并初步了解NP-难题。

实验过程
自拟一加权连通图,求出具有充分小权的哈密顿回路。

离散数学计算笛卡尔乘积C++或C语言实验报告

离散数学计算笛卡尔乘积C++或C语言实验报告

离散数学实验报告专业班级:12级计算机本部一班姓名:鲍佳珍学号:201212201401016 实验成绩:1.【实验题目】通过编程实现求给定集合A和B的笛卡儿乘积C(C=A×B)的运算。

2.【实验目的】已知所给集合A和B,求A与B的笛卡儿乘积C(C=A×B)。

假设集合A={1,2,3,4,5},集合B={2,3,8,9,10},3、实验原理与实现过程笛卡儿集合:设A,B是两个集合,称集合A×B={<x,y>|(x∈A)∧(y∈B)}为集合A与B的笛卡儿积。

换句话说,笛卡儿乘积是以有序偶为元素组成的集合,它的定义为C={<x,y>|x∈A∧y∈B}。

所以,欲求笛卡儿乘积。

只需取尽由集合A的元素及集合B的元素,并构成序偶<ai ,bi>送入C之中即可。

算法描述:。

(1)将集合A的元素个数送入N。

(2)将集合B的元素个数送入M。

(3)1⇒i。

(4)若i>N,则结束。

(5)1⇒j。

(6)若j>M,则转(9)。

(7)<ai ,bj>⇒C。

(8)j+1⇒j,转(6)。

(9)i+1⇒i,转(4)。

4、C或C++语言编程实现将实验内容与结果按实验报告格式要求填写并上传。

5. 【算法描述】1.实验原理真值表:表征逻辑事件输入和输出之间全部可能状态的表格。

列出命题公式真假值的表。

通常以1表示真,0 表示假。

命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法。

真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。

2.实验过程首先是输入一个合理的式子,生成相应真值表,然后用函数运算,输出结果:要求可生成逻辑非、合取、析取、蕴含、双条件表达式的真值表,例如:输入 !a输出真值表如下:a !a0 110输入a&&b输出真值表如下:a b a&&b0 0 00 1 01 0 01 1 1输入a||b输出真值表如下:a b a||b0 0 00 1 11 0 11 1 1输入a->b输出真值表如下:a b a->b0 0 10 1 11 0 01 1 1输入a<>b (其中<>表示双条件)输出真值表如下:a b a<>b0 0 10 1 01 0 01 1 16.【源程序(带注释)】#include<stdio.h>#include<iostream.h>int main(){int i,j,m,n,k;int a[30],b[30];printf("欢迎使用");printf("请输入集合A的元素个数:");scanf("%d",&m);printf("请输入集合B的元素个数:");scanf("%d",&n);cout<<endl;for(i=0;i<m;i++){printf("请输入集合A的第%d个数:",i+1);scanf("%d",&a[i]);} //输入集合A的元素cout<<endl;for(j=0;j<n;j++){printf("请输入集合B的第%d个数:",j+1); //输入集合B的元素scanf("%d",&b[j]);}k=0;printf("c={");for(i=0;i<m;i++){for(j=0;j<n;j++){printf("<%d,%d>",a[i],b[j]);k++;}} //输出最后结果printf("}\n");return 0;}7.【实验结果与分析总结(含运行结果截图)】。

中南大学离散数学实验报告(实验2ac)

中南大学离散数学实验报告(实验2ac)

“离散数学”实验报告(实验2AC)专业班级学号姓名日期:目录一、实验目的 (3)二、实验内容 (3)三、实验环境 (3)四、实验原理和实现进程(算法描述) (3)A题型 (3)C题型 (4)五、实验数据及结果分析 (7)A题型 (7)B题型 (9)六、源程序清单 (11)A题型 (11)B题型 (12)七、其他收成及体会 (18)一、实验目的把握关系的概念与性质,大体的关系运算,关系的各类闭包的求法。

明白得等价类的概念,把握等价类的求解方式。

二、实验内容1. 求有限集上给定关系的自反、对称和传递闭包。

(有两种求解方式,只做一种为A,两种都做为B)2. 求有限集上等价关系的数量。

(有两种求解方式,只做一种为A,两种都做为B)3. 求解商集,输入集合和等价关系,求相应的商集。

(C)三、实验环境C或C++语言编程环境实现。

四、实验原理和实现进程(算法描述)A题型求有限集上等价关系的数量。

集合上的等价关系与该集合的划分之间存在一一对应关系。

一个等价关系对应一个划分,一个划分也对应一个等价关系。

咱们把n个元素的集合划分成k 块的方式数叫第二类Stirling数,表示为S(n,k)。

给定S(n,n) = S(n,1) = 1,有递归关系:S(n,k) = S(n − 1,k − 1) + kS(n − 1,k)集合上所有等价类的个数即为k从1到n,所有S(n,k)之和。

那个问题的算法比较简单,仅需两步就可完成,第一依照上式,概念一个递归函数S(n,k),然后对k从1到n,求取sum=∑S(n,k),sum的值确实是给定n元集合上的等价关系数量,最后将其输出即可。

A题型的流程图如下所示:C题型求解商集,输入集合和等价关系,求相应的商集商集即等价类组成的集合,要求商集,第一需要判定输入的关系是不是为等价关系,不然没有商集。

判定输入的关系是不是为等价关系的算法如下:(1)将输入的关系转换为关系矩阵,那个地址概念了一个函数translate(),转换的方式为:依次查找输入的关系中的二元组的两个元素在集合中的位置,例如<a,b>,假设a在集合A中的位置为i,b在集合A中的位置为j,就令寄存关系矩阵的二维数组M[i][j]=1,如此就将输入的关系R转换为关系矩阵的形式。

中南大学离散数学实验报告(实验3ABC)

中南大学离散数学实验报告(实验3ABC)

“离散数学”实验报告(实验3ABC)专业班级学号姓名日期: 2011.12.19目录一、实验目的 (3)二、实验内容 (3)三、实验环境 (3)四、实验原理和实现过程(算法描述) (3)1实验原理 (3)2实验过程 (5)五、实验数据及结果分析 (6)六、源程序清单 (10)七、其他收获及体会 (16)一、实验目的理解图论的基本概念, 图的矩阵表示, 图的连通性, 图的遍历, 以及求图的连通支方法。

二、实验内容以偶对的形式输入一个无向简单图的边, 建立该图的邻接矩阵, 判断图是否连通(A)。

并计算任意两个结点间的距离(B)。

对不连通的图输出其各个连通支(C)。

三、实验环境C或C++语言编程环境实现。

四、实验原理和实现过程(算法描述)1.实验原理(1)建立图的邻接矩阵, 判断图是否连通根据图的矩阵表示法建立邻接矩阵A, 并利用矩阵的乘法和加法求出可达矩阵, 从而判断图的连通性。

连通图的定义: 在一个无向图G 中, 若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径), 则称vi和vj是连通的。

如果G 是有向图, 那么连接vi 和vj的路径中所有的边都必须同向。

如果图中任意两点都是连通的, 那么图被称作连通图。

判断连通图的实现:在图中, 从任意点出发在剩余的点中, 找到所有相邻点循环, 直到没有点可以加入为止, 如果有剩余的点就是不连通的, 否则就是连通的。

或者也可用WallShell算法, 由图的邻接矩阵判断图是否连通。

(2)计算任意两个结点间的距离图中两点i, j间的距离通过检验Al中使得aij为1的最小的l值求出。

路径P中所含边的条数称为路径P的长度。

在图G<V,E>中, 从结点Vi到Vj最短路径的长度叫从Vi到Vj的距离, 记为d<Vi, Vj>。

设图的邻接矩阵是A, 则所对应的aij的值表示, 点Vi到点Vj距离为n的路径有aij条。

若aij(1), aij(2), …, aij(n-1), 中至少有一个不为0, 则可断定Vi与Vj可达, 使aij(l)≠0的最小的l即为d(Vi, Vj)。

离散数学实验

离散数学实验

离散数学实验实验一真值计算一、实验目的熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。

二、实验内容(1)求任意一个命题公式的真值表:从键盘输入两个命题P 和Q 的真值,求它们的合取、析取、蕴含和等价的真值(2)利用真值表求任意一个命题公式的主范式(3)利用真值表进行逻辑推理三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。

#include#includeint main(){int p,q,hequ,xiqu,yunhan,dengjia;printf("请输入命题P和Q的真值(0或1)");scanf("%d%d",&p,&q);if(p!=0&&p!=1||q!=0&&q!=1)printf("输入错误");else{if(p==0&&q==0){hequ=0;xiqu=0;yunhan=1;dengjia=1;}else if(p==0&&q==1){hequ=0;xiqu=1;yunhan=1;dengjia=0;}else if(p==1&&q==0){hequ=0;xiqu=1;yunhan=0;dengjia=0;}else if(p==1&&q==1){hequ=1;xiqu=1;yunhan=1;dengjia=1;}printf("合取的真值为:%d\n",hequ);printf("析取的真值为:%d\n",xiqu);printf("蕴含的真值为:%d\n",yunhan);printf("等价的真值为:%d\n",dengjia);system("pause");return 0;}}实验二两个集合运算(交、并、补)一、实验目的集合论是一切数学的基础,也是计算机科学不可或缺的,在数据结构,数据库理论,开关理论,自动机理论和可计算理论等领域都有广泛的应用。

离散数学实验一:命题逻辑(1).

离散数学实验一:命题逻辑(1).

离散数学实验报告1.【实验题目】实验一命题逻辑(1)2.【实验目的】熟悉掌握命题逻辑中的联接词,实现二元合取、析取、蕴涵和等价表达式的计算,熟悉连接词逻辑运算规则,利用程序语言实现其逻辑运算。

3.【实验内容】从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。

4. 【实验要求】通过以下界面提示实现相应逻辑运算,给出具体逻辑值**************************************************************** 请输入变量命题P和Q的值(1或0):请选择(1—5)要进行的逻辑运算:1.合取运算(P∧Q)2.析取运算(P∨Q)3.条件运算(P→Q)4.双条件运算(P←→Q)5.继续/退出(y/n)****************************************************************5. 【算法描述】1.合取运算(P∧Q),P、Q同真时为真,其余为假。

2.析取运算(P∨Q),P、Q同假时为假,其余为真。

3.条件运算(P→Q),P为真,Q为假时,为假,其余为真。

4.双条件运算(P←→Q),P、Q同真同假是为真。

6. 【源程序(带注释)】#include<iostream>#include<stdlib.h>using namespace std;class math{char p,q;int result;public:math(char x,char y);int pdp(char x);int pdq(char y);hequ(char x,char y,int t);xiqu(char x,char y,int t);tiaojian(char x,char y,int t);shuangtiaojian(char x,char y,int t);caidan();};//判断p是否为1或0int math::pdp(char x){int a;p=x;if(x!='0'&&x!='1'){//cout<<"错误"<<endl;a=0;}cin.clear();cin.sync();return a;}//判断q是否为1或0int math::pdq(char y){q=y;int a;if(y!='0'&&y!='1'){//cout<<"错误"<<endl;a=0;}cin.clear();cin.sync();return a;}math::math(char x,char y){p=x;q=y;/*if(x!='0'&&x!='1'){cout<<"错误"<<endl;}else if(y!='0'&&y!='1'){cout<<"错误"<<endl;}*/}//合取运算math::hequ(char x,char y,int t){p=x;q=y;result=t;if(x=='1'&&y=='1') t=1;else t=0;cout<<"真值为:"<<t<<",请继续选择菜单功能:"; }//析取运算math::xiqu(char x,char y,int t){p=x;q=y;result=t;if(x=='0'&&y=='0') t=0;else t=1;cout<<"真值为:"<<t<<",请继续选择菜单功能:"; }//条件运算math::tiaojian(char x,char y,int t){p=x;q=y;result=t;if(x=='1'&&y=='0') t=0;else t=1;cout<<"真值为:"<<t<<",请继续选择菜单功能:"; }//双条件运算math::shuangtiaojian(char x,char y,int t){p=x;q=y;result=t;if(x=y) t=1;else t=0;cout<<"真值为:"<<t<<",请继续选择菜单功能:";}//逻辑运算菜单math::caidan(){cout<<"1. 合取运算(P∧Q)"<<endl;cout<<"2. 析取运算(P∨Q)"<<endl;cout<<"3. 条件运算(P→Q)"<<endl;cout<<"4. 双条件运算(P←→Q)"<<endl;cout<<"5. 退出/继续"<<endl;cout<<"请选择(1-5)要进行的逻辑运算:";}void main(){char x='0',y='0',n,n2;int t;cout<<"请输入变量命题P和Q的值(1或0)"<<endl;math math1(x,y);loop:{cin.clear();cin.sync();//判断P、Q的输入是否正确cout<<"输入P:";x=cin.get();while(math1.pdp(x)==0){cout<<"输入错误,重新输入P:";x=cin.get();}cout<<"输入Q:";y=cin.get();while(math1.pdq(y)==0){cout<<"输入错误,重新输入Q:";y=cin.get();}math1.caidan();}//判断菜单选项while(n){switch(n=cin.get()){case '1':math1.hequ(x,y,t);break;case '2':math1.xiqu(x,y,t);break;case '3':math1.tiaojian(x,y,t);break;case '4':math1.shuangtiaojian(x,y,t);break;case '5':cin.clear();cin.sync();cout<<"y/n:";loop2:{ //判断是否退出switch(n2=cin.get()){case 'y':exit(0);break;case 'n':goto loop;break;default:cin.clear();cin.sync();cout<<"输入错误,请重新选择y/n:";goto loop2;break;}}break;default:cin.clear();cin.sync();cout<<"输入错误,请重新选择菜单!"<<endl;goto loop;break;}cin.clear();cin.sync();}}7.【实验结果与分析总结(含运行结果截图)】输入P,判断P输入是否正确,正确即可输入Q。

离散数学上机实验报告

离散数学上机实验报告

离散数学上机实验报告《离散数学》实验报告姓名:学号:班级:实验一连结词逻辑运算一.实验目的实现二元合取、析取、蕴涵和等价表达式的计算。

熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。

二.实验内容从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。

要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。

三.实验环境使用Microsoft Visual C++6.0为编程软件,采用称C/C++语言为编程语言实现。

四.实验过程1.算法分析:合取:p,q都为1的时候为1,其他为0析取:p,q都为0的时候为0,其他为1蕴含:p为1,q为0时为0,其他为1等价:p,q同真同假2.程序代码:#include<stdio.h>int main()int P,Q,a,b,c,d,p,q;printf(" P的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++)printf("\t%d",P);}printf("\n Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++)printf("\t%d",Q);}printf("\n 非P的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(P==0)/*判断非P的值*/ p=1;elseprintf("\t%d",p);}}printf("\n 非Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(Q==1)/*判断非Q的值*/q=0;elseq=1;printf("\t%d",q);}}printf("\n P与Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(Q==0||P==0)/*判断P与Q的值*/elsea=1;printf("\t%d",a);}}printf("\n P或Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(Q==1||P==1)/*判断P或Q的值*/ b=1;elseb=0;printf("\t%d",b);}}printf("\nP蕴含Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(P==1&&Q==0)/*判断P蕴含Q的值*/ c=0;elsec=1;printf("\t%d",c);}}printf("\nP等价Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(P==Q)/*判断P等价Q的值*/d=1;elsed=0;printf("\t%d",d);}}printf("\n");return 0;3.实验数据及结果分析:实验二关系的复合运算及逆运算一.实验目的熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。

《离散数学》实验课程指导书

《离散数学》实验课程指导书
printf("**************************************************\n\n");
printf("您要在多少个数中进行线性查找,请输入(1~100):");
scanf("%d",&n);
printf("\n");
while(n<1 || n>100) //如果输入的数据列表长度不在[1,100]之间
scanf("%d",&a[i]);
i=0;
do
{
exchanged=0;
for(j=0;j<l-1-i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
exchanged=1;
}
if (i==0)
printf("\n");
printf("第%d趟冒泡排序法由小到大排序后:\n",i+1);
{ int r[50];
int length;
}list,*sqlist;
int CreateSqlist(sqlist s)
{
int i;
printf("请输入您要进行搜索的数据队列的长度:\n");
scanf("%d",&(s->length));
printf("\n请输入您要进行搜索的%d个数据:\n",s->length);
printf("冒泡排序算法\n");

离散数学实验指导书

离散数学实验指导书

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

二、实验内容从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。

用C语言或MATLAB实现。

三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。

实验二关系闭包计算一、实验目的熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。

二、实验内容从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,计算传递闭包时使用Warshall算法。

用C语言或MATLAB实现。

三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。

实验三计算两结点间长度为m的路的数目一、实验目的熟悉邻接矩阵和两结点间长度为m的路的数目的关系并编程计算。

二、实验内容从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。

考虑有向图和无向图。

用C语言或MATLAB实现。

三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。

实验四最优树的构造一、实验目的熟悉最优树的构造算法,掌握最优树的构造过程。

二、实验内容从键盘输入一组权值,构造出对应的最优树,列出构造过程。

用C语言或MATLAB实现。

三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。

部分参考答案:实验二C++源程序#include<iostream.h>int num;class guanxi{public:int jz[100][100];void set(){cout<<"shu ru yuan su shu"<<endl;cin>>num;cout<<"put in the guanxi"<<endl;int i,j;for(i=0;i<num;i++)for(j=0;j<num;j++)cin>>jz[i][j];cout<<"关系剧阵是:"<<endl;for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<jz[i][j]<<" ";if (j==num-1)cout<<endl;}cout<<endl;}friend void zifan();friend void duichen();friend void chuandi();};void zifan(guanxi ox){int i,j;for(i=0;i<num;i++)ox.jz[i][i]=1;for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<ox.jz[i][j]<<" ";if (j==num-1)cout<<endl;}}void duichen(guanxi ox){int i,j;for(i=0;i<num;i++)for(j=0;j<num;j++){if(ox.jz[i][j]==1)ox.jz[j][i]=1;}for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<ox.jz[i][j]<<" ";if (j==num-1)cout<<endl;}}void chuandi(guanxi ox){int i,j,k;for(i=0;i<num;i++)for(k=0;k<num;k++)if(ox.jz[k][i]==1){for(j=0;j<num;j++)if(ox.jz[i][j]==1)ox.jz[k][j]=1;}for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<ox.jz[i][j]<<" ";if (j==num-1)cout<<endl;}}main(){guanxi o1;o1.set();cout<<"它的自反闭包是:"<<endl;zifan(o1);cout<<"它的对称闭包是:"<<endl;duichen(o1);cout<<"它的传递闭包是:"<<endl;chuandi(o1);return 0;}C源程序#include<stdio.h>int main(){int i,j,k,n;static int str[122],zifan[122],chuandi[122],duich[122];printf("Please input the jie:\n");scanf("%d",&n);printf("A=%d\n",n);for(i=0;i<n*n;i++){scanf("%d",&str[i]);}printf("The shu zu is:\n");for(j=0;j<n*n;j++){printf("%4d",str[j]);if((j+1)%n==0)printf("\n");}for(j=0;j<n*n;j++){zifan[j]=str[j];chuandi[j]=str[j];duich[j]=str[j];}printf("The zifan bibao is:\n");for(i=0;i<n*n;i++){if(i%(n+1)==0)zifan[i]=zifan[i]||1;printf("%4d",zifan[i]);if((i+1)%n==0)printf("\n");}printf("The duich bibao is:\n");for(i=0,j=0;i<n*n&&j<n;i++){if(i>j*(n+1)&&i<(j+1)*n){ duich[i]=duich[(i-j*(n+1))*(n-1)+i]||duich[i];duich[(i-j*(n+1))*(n-1)+i]=duich[(i-j*(n+1))*(n-1)+i]||duich[i];}else if(i>=(j+1)*n)j++;}for(i=0;i<n*n;i++){printf("%4d",duich[i]);if((i+1)%n==0)printf("\n");}printf("The chuandi bibao is:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)if(chuandi[j*n+i]){for(k=0;k<n;k++)chuandi[j*n+k]=chuandi[j*n+k]||chuandi[i*n+k];}for(i=0;i<n*n;i++){printf("%4d",chuandi[i]);if((i+1)%n==0)printf("\n");}return 0;}实验三#include <iostream.h>class luchang{private:int N;int **p;public:luchang(int n);~luchang();int input();luchang &operator =(luchang &A);luchang &mul(luchang &A,luchang &B);void disply();int disply(int M);};luchang::luchang(int n){N=n;int i;p=new int*[N];for (i=0;i<N;i++)p[i]=new int[N];}luchang::~luchang(){int i;for (i=0;i<N;i++)delete p[i];delete p;}int luchang::input(){int i,j;for (i=0;i<N;i++){for (j=0;j<N;j++)cin>>p[i][j];}return 0;}luchang& luchang::operator =(luchang &A){int i,j;for (i=0;i<N;i++){for(j=0;j<N;j++)p[i][j]=A.p[i][j];}return *this;}luchang& luchang::mul(luchang &A,luchang &B) {int i,j,k,sum=0;for (i=0;i<N;i++){for (j=0;j<N;j++){for (k=0;k<N;k++){sum+=B.p[i][k]*A.p[k][j];p[i][j]=sum;}sum=0;}}return *this;}void luchang::disply(){for (int i=0;i<N;i++){for (int j=0;j<N;j++)cout<<p[i][j]<<" ";cout<<endl;}}int luchang::disply(int M){int i,j;int count=0;for (i=0;i<N;i++){for (j=0;j<N;j++){if (p[i][j]==M)count++;else continue;}}cout<<count<<endl;return 0;}void main(){cout<<"请输入图中的点数V"<<endl;int n=0;cin>>n;luchang ob1(n),ob2(n),ob3(n);cout<<"请输入邻接矩阵"<<endl;ob1.input();ob2=ob1;ob3=ob1;cout<<"请输入要查找的路长M"<<endl;int M=0;cin>>M;for (int i=0;i<M-1;i++){ob3.mul(ob1,ob2);ob2=ob3;}ob3.disply();ob3.disply(M);cout<<endl;}。

离散数学 欧拉图实验

离散数学 欧拉图实验

1、欧拉图判定和应用【实验内容】 判断一个图是不是,如果是,求出所有欧拉路【实验原理和方法】(1)用关系矩阵R=n n ij r )(表示图。

(2)对无向图而言,若所有结点的度都是偶数,则该图为欧拉图。

C 语言算法:flag=1;for(i=1;i<=n && flag;i++){sum=0;for(j=1;j<=n;j++)if(r[i][j]) sum++;if(sum%2==0) flag=0;}如果 flag 该无向图是欧拉图(3)对有向图而言,若所有结点的入度等于出度,则该图为欧拉图。

C 语言算法:flag=1;for(i=1;i<=n && flag;i++){sum1=0;sum2=0;for(j=1;j<=n;j++)if(r[i][j]) sum1++;for(j=1;j<=n;j++)if(r[j][i]) sum2++;if(sum1%2==0 || sum2%2==0) flag=0; }如果 flag 该有向图是欧拉图(4)求出欧拉路的方法:欧拉路经过每条边一次且仅一次。

可用回溯的方法求得所有欧拉路。

C 语言算法:int count=0,cur=0,r[N][N]; // r[N][N]为图的邻接矩阵,cur 为当前结点编号,count 为欧拉路的数量。

int sequence[M];// sequence 保留访问点的序列,M 为图的边数输入图信息;void try1(int k) //k 表示边的序号{int i,pre=cur; //j保留前一个点的位置,pre为前一结点的编号for (i=0;i<N;i++)if (r[cur][i]) //当前第cur点到第i点连通{//删除当前点与第i点的边,记下第k次到达点i,把第i个点设为当前点r[cur][i]=0;cur=sequence[k]=i;if (k<M) try1(k+1); //试下一个点else prt1();//经过了所有边,打印一个解//上面条件不满足,说明当前点的出度为0,回溯,试下一位置r[pre][i]=1;cur=pre;}}2、最优二叉树的应用【实验内容】最优二叉树在通信编码中的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学离散数学课程组——国家精品课程
离散数学
电子科技大学
计算机科学与工程学院
信息与软件工程学院
2013年9月22日星期日
1
电子科技大学离散数学课程组——国家精品课程
离散数学实验安排(顾小丰)
时间:第十五周六( 6月2日) 9:00~12:00 第十六周六(6月9日) 14:30~17:30 地点:信息与软件工程学院三楼实验中心 要求: 1. 使用C语言编写计算机程序完成题目; 2. 题目: 验证性实验:1-3必做 设计性实验:1必做 2和3题任选一个做 3. 完成后撰写实验报告(6月25日前交给辅导员)
5
电子科技大学离散数学课程组——国家精品课程
设计性实验1—穿衣问题(关系)
如图是一个人穿衣服时的顺序要求。比如,必须 要先穿衬衫(shirt)才能穿毛衣(sweater)。编写 程序给出按照什么样的顺序穿衣服才是合适的。
6
电子科技大学离散数学课程组——国家精品课程
设计性实验2 —分油问题(数理逻辑)
2
电子科技大学离散数学课程组——国家精品课程
验证性实验1—逻辑学家会议问题(数理逻辑)
有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些 奇怪,因为他们有很多要求,已知: 1.A,B两人至少有1人参加会议。 2.A,E,F3人中有2人参加会议。 3.B和C两人决定,要么两人都去,要么两人都不去。 4.A,D两人中只1人参加会议。 5.C,D两人中也只要1人参加会议。 6.如果D不去,那么E也决定不去。那么最后究竟有哪几 个人参加了会议呢? 参考思路:列出前提条件对应的公式,并求出对应的主 范式,从而确定那些人参加会议。
两个小孩去打油,一人带了一个一斤的空瓶,另 一个带了一个七两和一个三两的空瓶。原计划各 打一斤油,可是由于所带的钱不够,只好合打了 一斤油,在回家的路上,二人想平分这一斤油, 可是又没有其它工具。现只用这三个瓶子(一斤 、七两、三两)精确地分出两个半斤油来。
7
电子科技大学离散数学课程组——国家精品课程
b 2 6 8 1 1 c 3 1 7 2 d 7 6 4 9 9 2
a
i
j
k
1
e 4
h
g
1
f
4
电子科技大学离散数学课程组——国家精品课程
验证性实验3-运算律与特殊元(代数系统)
给定一个集合A和该集合上的一个二元运算*, 编写程序(集合和运算具有普遍性),验证该 运算是否满足结合律、交换律、幂等律、消去 律,并计算幺元、零元、幂等元、可消去元、 逆元。
3
电子科技大学离散数学课程组——国家精品课程
验证性实验2—海底管道问题(图论)
某石油公司在海湾拥有几个石油钻井平台,每个平台 开采出的石油需要运往海岸上的炼油厂。要在平台与 炼油厂之间建造一个石油运输网络。问管道如何设计 ,才能使给出了经过勘测之后可能的管道铺设 走向和建设费用。
设计性实验3 - 洒水车路线问题(图论)
一辆洒水车从所在的市政办公点出发,需要在所 有负责的街道上洒水,并最后回到原点。问洒水 车如何设计路线才能使得走的路程最短。 归结为数学问题:设给出了一个连通的无向图, 它的每条边都有非负的长度,求G的一条经过每 条边至少一次并且总度最小的回路。
8
相关文档
最新文档