离散数学实验报告

合集下载

离散数学 实验报告

离散数学 实验报告

离散数学实验报告离散数学实验报告引言:离散数学是一门研究离散结构的数学学科,它对于计算机科学、信息技术等领域具有重要的应用价值。

本实验报告旨在通过实际案例,探讨离散数学在现实生活中的应用。

一、图论在社交网络中的应用社交网络已成为人们日常生活中不可或缺的一部分。

图论作为离散数学的重要分支,对于分析和研究社交网络具有重要意义。

以微信为例,我们可以通过图论的方法,分析微信中的好友关系、群组关系等。

通过构建好友关系图,我们可以计算某个人在社交网络中的影响力,进而预测他的行为模式。

二、布尔代数在电路设计中的应用布尔代数是离散数学中的重要内容,它在电路设计中扮演着重要的角色。

通过布尔代数的运算规则和定理,我们可以简化复杂的逻辑电路,提高电路的可靠性和效率。

例如,我们可以使用布尔代数中的与、或、非等逻辑运算符,设计出满足特定功能需求的逻辑电路。

三、排列组合在密码学中的应用密码学是离散数学的一个重要应用领域。

排列组合是密码学中常用的数学工具之一。

通过排列组合的方法,我们可以设计出强大的密码算法,保障信息的安全性。

例如,RSA加密算法中的大素数的选择,就涉及了排列组合的知识。

四、概率论在数据分析中的应用概率论是离散数学中的一门重要学科,它在数据分析中具有广泛的应用。

通过概率论的方法,我们可以对数据进行统计和分析,从而得出一些有意义的结论。

例如,在市场调研中,我们可以通过抽样调查的方法,利用概率论的知识,对整个市场的情况进行推断。

五、图论在物流规划中的应用物流规划是现代物流管理中的一个重要环节。

图论作为离散数学的重要分支,可以帮助我们解决物流规划中的一些问题。

例如,我们可以通过构建物流网络图,分析货物的流动路径,优化物流的运输效率,降低物流成本。

结论:离散数学作为一门重要的数学学科,在现实生活中具有广泛的应用。

通过对离散数学的学习和应用,我们可以解决实际问题,提高工作效率,推动社会的发展。

希望通过本实验报告的介绍,能够增加对离散数学的兴趣,进一步挖掘离散数学在实际生活中的潜力。

离散数学实验三

离散数学实验三

实验报告(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,最小上界为该正整数,所以该偏序集是一个格。

离散数学实验报告3

离散数学实验报告3

《离散数学》实验报告学院专业指导教师学号姓名提交日期实验三命题公式的范式一.实验目的熟悉逻辑运算否定、合取、析取、蕴含、等价规则,利用程序语言实现命题公式的真值表运算,求公式的主析取范式及主合取范式。

二.实验内容(一)用真值表法求出下列公式的主析取范式及主合取范式。

p ∧(q ↔r)(二)选课方案某学生要从A、B 、C 三门选修课中选修1~2门,根据学校的排课计划以及该生的实际情况,选择时必须满足以下条件:(1) 若选择A,则必须选择C;(2) 若选择B,则不能选择C;(3) 若不选择C,则可选择A或B。

问该生有几种选择方案。

(三)讨论公司派遣方案:派小李或小张去上海出差。

若派小李去,则小赵要加班。

若派小张去,小王也得去。

但小赵没有加班。

问公司是如何派遣的。

令p:小李去上海q:小张去上海r: 小赵加班s: 小王去上海三. 实验过程(一)求公式的主析取范式及主合取范式。

1. 算法分析:列出命题公式,说明程序设计思路。

2. 程序代码:3.实验数据及结果分析列出求解的真值表,并筛选出正确答案。

(二)选课方案- 1 -1. 算法分析:列出命题公式,说明程序设计思路。

2. 程序代码:3.实验数据及结果分析列出求解的真值表,并筛选出正确答案。

(三)讨论公司派遣方案:1. 算法分析:列出命题公式,说明程序设计思路。

2. 程序代码:3.实验数据及结果分析列出求解的真值表,并筛选出正确答案。

- 2 -。

离散数学试验报告

离散数学试验报告

学院理学院学生姓名 xxx学号 xxxxxxxxxxx实验:编程二元关系的传递性判别,二元关系闭包方法一.前言引语:二元关系是离散数学中重要的内容。

因为事物之间总是可以根据需要确定相应的关系。

从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。

二.数学原理:1.传递关系:对任意的x,y,z∈A,如果<x,y>∈R且<y,z>∈R,那么<x,z>∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的⇔ (∀x)(∀y)(∀z)[(x ∈A)∧(y∈A)∧(z∈A)∧((<x,y>∈R)∧(<y,z>∈R)→(<x,z>∈R))]=12.自反闭包、对称闭包、传递闭包:设R是定义在A上的二元关系,若存在A 上的关系R′满足:1)R′是自反的(或对称的、或可传递的),2)R⊆ R′,3)对A上任何其它满足1)和2)的关系R〞,都有:R′⊆R〞。

则称R′为R的自反闭包(或对称闭包、或传递闭包),分别记为r(R)、(s(R)和t(R))。

三.实验编程语言:c++四.实验程序源代码:#include<iostream>using namespace std;int cdx(int a[100][100],int n){int b[100][100],i,j;for(i=1;i<=n-1;i++){for(j=1;j<=n;j++){if(a[1][j]==a[i+1][j] && a[1][j]==0)b[i][j]=0;elseb[i][j]=1;}for(j=1;j<=n;j++){if(b[i][j]!=a[1][j])return 0;}}return 1;}void zfbb(int a[100][100],int n){int i,j;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){a[i][i]=1;a[j][j]=1;}}}cout<<"自Á?反¤¡ä闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void dcbb(int a[100][100],int n){int i,j;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){a[j][i]=1;}}}cout<<"对?称?闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void cdbb(int a[100][100],int n){int i,j,k;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){for(k=1;k<=n;k++){a[i][k]=a[i][k]+a[j][k];}}}}cout<<"传ä?递ÌY闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void main(){int i,j,n,a[100][100],sel,ins;cout<<"请?输º?入¨?二t元a关?系¦Ì矩?阵¨®维?数ºyn"<<endl;cin>>n;cout<<"请?按ã¡äa[1,1],a[1,2]...a[1,n],a[2,1]...a[n.n]的Ì?顺3序¨©输º?入¨?关?系¦Ì矩?阵¨®的Ì?元a素?值¦Ì(ê¡§0,ê?1)ê?"<<endl;for(i=1;i<=n;i++)for(j=1;j<=n;j++){cin>>a[i][j];}INDEX:cout<<"请?输º?入¨?要©a判D定¡§的Ì?性?质¨º:êo"<<endl;cout<<"1、¡é传ä?递ÌY性?"<<endl;cout<<"2、¡é自Á?反¤¡ä闭À?包㨹"<<endl;cout<<"3、¡é对?称?闭À?包㨹"<<endl;cout<<"4、¡é传ä?递ÌY闭À?包㨹"<<endl;cout<<"5、¡é退ª?出?"<<endl;cin>>sel;if(sel==1){ins=cdx(a,n);if(ins==0)cout<<"该?二t元a关?系¦Ì不?具?有®D传ä?递ÌY性?。

离散数学实验报告(两篇)

离散数学实验报告(两篇)

引言:离散数学是一门基础性的数学学科,广泛应用于计算机科学、电子信息等领域。

本文是《离散数学实验报告(二)》,通过对离散数学实验的深入研究和实践,总结了相关的理论知识和应用技巧,希望能够对读者对离散数学有更加深入的理解。

概述:本实验主要涉及离散数学中的集合、关系、图论等基本概念及其应用。

通过对离散数学的实验学习,深入掌握了这些概念和应用,对于在实际问题中的应用和拓展具有重要的意义。

正文内容:一、集合相关概念及应用1.定义:集合是由元素组成的无序的整体。

介绍了集合的基本概念、集合的表示法以及集合的运算。

2.集合的应用:介绍了集合在数学、计算机科学中的应用,如数据库的查询、关系代数等。

二、关系相关概念及应用1.定义:关系是一个元素与另一个元素之间的对应关系。

介绍了关系的基本概念、关系的表示方法及其运算。

2.关系的应用:介绍了关系在图像处理、社交网络分析等领域的应用,如图像中的像素点之间的关系、社交网络中用户之间的关系等。

三、图论基础知识及应用1.定义:图是由顶点和边组成的抽象的数学模型。

介绍了图的基本概念、图的表示方法和图的运算。

2.图论的应用:介绍了图论在路由算法、电子商务等领域的应用,如路由器的路由选择、电子商务中的商品推荐等。

四、布尔代数的概念及应用1.定义:布尔代数是一种基于集合论和逻辑学的代数系统。

介绍了布尔代数的基本概念、布尔表达式及其化简方法。

2.布尔代数的应用:介绍了布尔代数在电路设计、开关控制等方面的应用,如逻辑门电路的设计、开关控制系统的建模等。

五、递归的概念及应用1.定义:递归是一种通过调用自身来解决问题的方法。

介绍了递归的基本原理、递归的应用技巧。

2.递归的应用:介绍了递归在算法设计、树的遍历等方面的应用,如快速排序算法、树结构的遍历等。

总结:通过本次离散数学的实验学习,我深入掌握了集合、关系、图论等基本概念与应用。

集合的应用在数据库查询、关系代数等方面起到了重要的作用。

关系的应用在图像处理、社交网络分析等领域有广泛的应用。

离散数学实验报告

离散数学实验报告

离散数学实验报告一、实验目的离散数学是现代数学的一个重要分支,它在计算机科学、信息科学、人工智能等领域有着广泛的应用。

本次离散数学实验的目的在于通过实际操作和编程实现,深入理解离散数学中的基本概念、原理和算法,提高解决实际问题的能力,培养逻辑思维和创新能力。

二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。

同时,还使用了一些相关的数学库和工具,如 sympy 库用于符号计算。

三、实验内容1、集合运算集合是离散数学中的基本概念之一。

在实验中,我们首先定义了两个集合 A 和 B,然后进行了并集、交集、差集等运算。

通过编程实现这些运算,加深了对集合运算定义和性质的理解。

```pythonA ={1, 2, 3, 4, 5}B ={4, 5, 6, 7, 8}并集union_set = Aunion(B)print("并集:", union_set)交集intersection_set = Aintersection(B)print("交集:", intersection_set)差集difference_set = Adifference(B)print("A 与 B 的差集:", difference_set)```2、关系的表示与性质判断关系是离散数学中的另一个重要概念。

我们使用矩阵来表示关系,并通过编程判断关系的自反性、对称性和传递性。

```pythonimport numpy as np定义关系矩阵relation_matrix = nparray(1, 0, 1, 0, 1, 0, 1, 0, 1)判断自反性is_reflexive = all(relation_matrixii == 1 for i inrange(len(relation_matrix)))print("自反性:", is_reflexive)判断对称性is_symmetric = all(relation_matrixij == relation_matrixji for i in range(len(relation_matrix)) for j in range(len(relation_matrix)))print("对称性:", is_symmetric)判断传递性is_transitive = Truefor i in range(len(relation_matrix)):for j in range(len(relation_matrix)):for k in range(len(relation_matrix)):if relation_matrixij == 1 and relation_matrixjk == 1 and relation_matrixik == 0:is_transitive = Falsebreakprint("传递性:", is_transitive)```3、图的遍历图是离散数学中的重要结构。

离散数学(集合地运算)实验报告材料

离散数学(集合地运算)实验报告材料

民族学院计算机科学与工程学院实验报告实验题目:集合的运算课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:网络工程班级:网络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中元素存储完毕。

从键盘输入两个命题变元P和Q的真值-求它们的合取、析取、蕴含和等价的真值

从键盘输入两个命题变元P和Q的真值-求它们的合取、析取、蕴含和等价的真值

长治学院《离散数学》实验报告专业:计算机科学与技术班级:计科1202班学号:姓名:武文超组别: 1指导老师:李艳玲目录一、实验目的 (3)二、算法思想 (3)三、流程图 (4)四、实验结果(截图) (5)五、程序代码 (7)六、总结 (10)一、实验目的本实验课程是信息专业学生的一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。

熟悉掌握合取、析取、蕴涵和等价,进一步能用它们来解决实际问题。

二、算法思想1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴含和等价的真值。

(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)等价:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P←→Q, 读作P双条件于Q。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《离散数学》实验报告专业网络工程班级姓名学号授课教师二 O 一六年十二月目录实验一联结词的运算实验二根据矩阵的乘法求复合关系实验三利用warshall算法求关系的传递闭包实验四图的可达矩阵实现实验一联结词的运算一.实验目的通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习与锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解与记忆命题连接词运算。

二.实验原理(1) 非运算, 符号:⎤ ,当P=T时 ,⎤P为F, 当P=F时 ,⎤P为T 。

(2) 合取, 符号: ∧ , 当且仅当P与Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。

(3) 析取, 符号: ∨ , 当且仅当P与Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。

(4) 异或, 符号: ▽ , 当且仅当P与Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。

(5) 蕴涵, 符号: →, 当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。

(6) 等价, 符号: ↔ , 当且仅当P,Q的真值不同时,命题P↔Q的真值才为假;否则,P→Q的真值为真。

三.实验内容编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。

四.算法程序#include<stdio、h>void main(){printf("请输入P、Q的真值\n");int a,b;scanf("%d%d",&a,&b);int c,d;if(a==1)c=0;else c=1;if(b==1)d=0;else d=1;printf("非P、Q的结果为%d,%d\n",c,d);int e;if(a==1&&b==1)e=1;else e=0;printf("合取的结果为%d\n",e);int f;if(a==0&&b==0)f=0;else f=1;printf("析取的结果为%d\n",f);int g;if(a==1&&b==0)g=0;else g=1;printf("单条件的结果为%d\n",g);int h;if(a==b)h=1;else h=0;printf("双条件的结果为%d\n",h);}内容格式:新罗马,五号,行间距固定值18磅五.实验结果六.心得体会通过编程,学会了析取、合取、单条件连接词、双条件连接词的用法。

实验二 根据矩阵的乘法求复合关系一.实验目的复合运算就是一种重要的二元关系运算,可用于二元关系的合成,二元关系的性质判断,二元关系传递闭包的运算等方面,通过编程实现二元关系的复合运算,帮助同学们理解复合运算的过程,复合形成新的二元关系中的序偶就是如何产生的。

二.实验原理复合运算能由两个二元关系生成一个新的二元关系。

设X →Y(R 关系),Y →Z(S 关系),则称X →Z(R ◦S 关系)为R 与S 的复合关系,并规定为:R ◦S ={<x,z>|x ∈X ∧z ∈Z ∧∃y(y ∈Y ∧<x,y>∈R ∧<y,z>∈S)}关系可用矩阵表示,故复合运算也可用矩阵表示。

设有三个集合:X={x 1,x 2…x m },Y={y 1,y 2…y n },Z={z 1,z 2…z p }, Z Y X SR −→−−→−,|X|=m, |Y|=n, |Z|=p,M R =[a ik ]m ×n ,M S=[a kj ]n ×p 则复合关系R ◦S 的关系矩阵为: M R ◦S = M R ◦M S =[c ij ] m ×p )(1kjik nk ij b a c ∧=∨=∨代表逻辑加,满足0∨0=0,0∨1=1,1∨0=1,1∨1=1 ∧代表逻辑乘,满足0∧0=0,0∧1=0,1∧0=0,1∧1=1三.实验内容将二元关系用关系矩阵表示,通过两个关系矩阵对应行列元素先进行逻辑乘,后进行逻辑加生成新的关系矩阵中的每一个元素。

新的关系矩阵所对应的二元关系就就是两个二元关系复合形成的,编程实现这一复合过程。

四.算法程序#include <stdio 、h> int main() { int a[100][100],b[100][100],c[100][100],i,j,k,n; printf("请输入集合X 中元素个数:");scanf("%d",&n);printf("请输入关系矩阵Mr 的格式:\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++)scanf("%d",&a[i][j]);}printf("请输入关系矩阵Ms的格式:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)scanf("%d",&b[i][j]);}for(i=0;i<n;i++){for(j=0;j<n;j++) if(a[i][j]==1)for(k=0;k<n;k++) if(b[j][k]==1)c[i][k]=1;}for(i=0;i<n;i++){for(j=0;j<n;j++)if(c[i][j]!=1)c[i][j]=0;}printf("\n");printf("关系矩阵Mr与Ms的复合运算结果就是:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%d ",c[i][j]);printf("\n");}return 0;}五.实验结果实验结果截图大小为:宽(10cm)×高(8cm)六.心得体会通过编程,更加深入的了解了矩阵复合运算法则。

实验三 利用warshall 算法求关系的传递闭包一.实验目的对于一个二元关系R,它的传递闭包(t(R))就就是包含R,并且具有传递性质的最小二元关系。

传递闭包在图论、数据库、编译原理、计算机形式语言中都有重要的应用。

warshall 算法就是计算传递闭包的一种有效算法,通过编程实现warshall 算法,帮助同学们更好地理解传递闭包的生成过程。

二.实验原理设X 就是含有n 个元素的集合,R 就是X 上的二元关系,则:23()n t R R R R R =U U UL U以上计算传递闭包时需要按照复合关系定义求iR ,这就是比较麻烦的,特别当有限集合元素比较多时计算量很大。

1962年Warshall 提出了一个求t(R)的有效计算方法:设R 就是n 个元素集合上的二元关系,R M 就是R 的关系矩阵: 第一步:置新矩阵M,R M M ←; 第二步:置i ,1←i ;第三步:对)1(n j j ≤≤,若M 的第j 行i 列处为1,则对n k ,,2,1Λ=作如下计算: 将M 的第j 行第k 列元素与第i 行第k 列元素进行逻辑加,然后将结果送到第j 行k 列处,即 ],[],[],[k i M k j M k j M ∨←; 第四步:1+←i i ;第五步:若n i ≤,转到第三步,否则停止。

三.实验内容将二元关系用关系矩阵表示,编程实现Warshall算法,获得二元关系传递闭包的关系矩阵。

四.算法程序#include <stdio、h>#include <math、h>void main(){int A[10][10];int n,i,j,k;printf("输入关系矩阵的维数n(n<10)\n");scanf("%d",&n);printf("输入n*n个数据(0 or 1)\n");for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%d",&A[i][j]);if(A[i][j]!=1&&A[i][j])printf("There is an error");}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){for(k=1;k<=n;k++){if(A[i][j]&&(A[i][k]||A[j][k]))A[i][k]=1;}}}printf("传递闭包的关系矩阵:\n");for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%2d",A[i][j]);printf("\n");}}五.实验结果六.心得体会通过编程,深入了解什么就是Warshall 算法,也加深了对传递闭包的了解。

实验四 图的可达矩阵实现一.实验目的可达矩阵表明了图中任何两个不同的结点之间就是否存在至少一条道路,以及在任何结点处就是否存在着回路。

可达性矩阵就是判别一个有向图就是否为强连通图或弱连通图的有效工具,通过编程实现图形的可达矩阵,帮助同学们掌握可达矩阵生成方法。

二.实验原理定义 设G=(V,E)就是一个n 阶的有向简单图,{}n v v v V ,,,21Λ=。

定义矩阵n n j i p P ⨯=)(,其中⎩⎨⎧=,,v v p j i ij 其它存在非零的有向道路到从,0,1称P 就是图G 的可达矩阵。

求可达矩阵可以先构造A,nA A ,,2Λ,再构造n n A A AB Λ++=2,最后利用关系⎪⎩⎪⎨⎧=>=,b ,b p n tj n ij ij 0,00,1)()(若若 确定P 的元素ij p 从而构造出P 。

显然,这种先求n nB A A A A ,,,,,32Λ再构造P 的方法很费事 。

如果我们把邻接矩阵A当作关系矩阵,那么求可达矩阵就相当于求A的传递闭包,因此可以仿照集合论中求关系的传递闭包的办法,求可达矩阵P。

三.实验内容将图形中的边表达成二元关系,计算该二元关系的传递闭包,并将传递闭包表达成关系矩阵,该关系矩阵就就是图形的可达矩阵,编程实现求可达矩阵的过程。

相关文档
最新文档