- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Warshall算法及基本思想
长治学院
《离散数学》实验报告
专 业: 计算机科学与技术
班 级: 计科1202班
学 号:
姓 名: 武文超
组 别: 11
指导老师: 李艳玲
2013.11.30~2013.12.21
目录
一、实验目的··································3
二、算法思想··································3
三、流程图····································4
四、实验结果(截图)····························5
五、程序代码··································7
六、总结······································8
一、实验目的
当集合的阶数n较大时,求二元关系的可传递闭包的工作量是相当庞大的。幸运的是1962年S.Warshall提出了一个计算R+的有效方法,可在计算机上编程实现。采用C语言函数写出这个算法。程序中用m[i][j]表示关系矩阵MR的第i行第j列元素,用||表示逻辑或计算。计算R+的函数名为Warshall,它的两个形式参数m和n分别表示关系矩阵M和矩阵的行数。函数的实现实际上是一个三重循环构成。
二.算法思想
Warshall算法的基本思想
对每个结点(从第一列开始),找出所有具有到此结点的有向边的结点(即该列中元素为1的所在行的结点),再将这些结点所在行同该结点所在行进行逻辑加后作为这些结点所在的新行(添加新的有向边)(反映了如果这些结点没有到其它结点的有向边,但有到该结点的有向边,再通过该结点间接到达其它结点,根据传递闭包的定义,这些结点就必然有一条有向边到达其它结点)。
设R是集合上的二元关系,Mr是R的关系矩阵
(1)置新矩阵A:=Mr
(2)置(列) j:=1
(3) 对所有的i(1≤i≤n)
如A(i,j)=1,则对k=1,2,…,n
A(i,k):=A(i,k) ( A(j,k)
( 即将A的第i行与A的第j行进行逻辑加后送回A的第i行 )
(4)j:=j+1
(5)如j≤n转(3),否则停止。
三、流程图如下:
四、 实验结果(截图)
进入程序
正确输入
错误输入
退出程序
五、程序代码
#includestdio.h
#includemath.h
void main( )
{
int A[10][10] ;
int n,i,j,k;
printf(请输入关系矩阵的维数n(n10)\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]!=1A[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);
}
}
六、总结
若在一个集合上进行某种运算,其运算结果仍为集合中的元素,则称该集合为此运算上的闭包。集合 S 是闭集当且仅当 Cl(S)=S(这里的cl即closure,闭包)。特别的,空集的闭包是空集,X 的闭包是 X。集合的交集的闭包总是集合的闭包的交集的子集(不一定是真子集)。有限多个集合的并集的闭包和这些集合的闭包的并集相等;零个集合的并集为空集,所以这个命题包含了前面的空集的闭包的特殊情况。无限多个集合的并集的闭包不一定等于这些集合的闭包的并集,但前者一定是后者的父集。相关矩阵也叫相关系数矩阵,是由矩阵各列间的相关系数构成的。也就是说,
文档评论(0)