我们先对R(n)进行解释一下,不然你们看不太懂。

就是R(n)表示,通过从 1...n 个点绕到到达所求点,注意原来的位置的点,发生改变的就是刚才的含义去解释。

给一个例子解释一下。

其中的R(i)...R(N);(0<=N<=4)

初始的R(0)就是可达矩阵。

R(1)表示在R(0)的基础上面变化

R(1)表示在R(0)的基础上面变化

R(2)表示在R(1)的基础上面变化

R(3)表示在R(2)的基础上面变化

R(4)表示在R(3)的基础上面变化

关键:

R(0)表示直接相连的关系,可以到达就记为1,否则就记为0.

R(1)表示从该点通过1可以到达目标点的记为1,否则就记为0.(多出来的点的关系)

R(2)表示从该点通过1,2可以到达目标点到达的记为1.否则就记为0.(与R(1)相比,多出来的点的关系。)

R(3)与R(4)表示的意思同上。

Warshall算法思想:

R(0)就只是有向图的邻接矩阵。

R(1)包含可以用第一个顶点作为中间点的路径信息。

R(n)说明可以用所有的顶点作为中间点寻找有向路径,所以R(n)就是我们要求的传递闭包,即可达矩阵。

这个算法的中心是我们可以通过R(k-1)来计算R(k)的所有元素。

算法的步骤如下:

R(k) <- R(k-1)

for(k<-1;k<=n;k++)

for(i<-1;i<=n;i++)

for(j<-1;j<=n;j++)

R(k)[i,j] = R(k-1)[i,j] or R(k-1)[i,k] and R(k-1)[k,j]

return  R(n)

通过上面的算法步骤,我们也可以知道,推出R(n),只要知道R(n-1)的关系矩阵从而推出R(n)。

每一点的计算关系都会遵循一个计算公式。

“R(k)[i,j] = R(k-1)[i,j] or R(k-1)[i,k] and R(k-1)[k,j]”

从而程序代码也可以按照上面的计算关系进行计算,改变。

看一个代码改变一下求R(N),已知的是R(0)。

代码如下:

#include<iostream>
#include<cstdio>  using namespace std;  int temp[5][5],temp1[5][5];  void exchange(int sum,int k)
{  for(int i=1;i<=sum;i++)  {  for(int j=1;j<=sum;j++)  {  temp[i][j] = temp1[i][j] or temp1[i][k] and temp1[k][j];  }  }  for(int i=1;i<=sum;i++)  {  for(int j=1;j<=sum;j++)  {  temp1[i][j] = temp[i][j];  }  }
}  int main()
{  int sum;  cout<<"请输入你的矩阵边数:"<<endl;  cin>>sum;  cout<<"请输入各边的关系:"<<endl;  for(int i=1;i<=sum;i++)  {  for(int j=1;j<=sum;j++)  {  cin>>temp1[i][j];  }  }  exchange(sum,1);  cout<<"R(1)的传递闭包关系图如下:"<<endl;  for(int i=1;i<=sum;i++)  {  int ff=0;  for(int j=1;j<=sum;j++)  {  if(ff++!=0)  cout<<' ';  cout<<temp1[i][j];  }  cout<<endl;  }  exchange(sum,2);  cout<<"R(2)的传递闭包关系图如下:"<<endl;  for(int i=1;i<=sum;i++)  {  int ff=0;  for(int j=1;j<=sum;j++)  {  if(ff++!=0)  cout<<' ';  cout<<temp1[i][j];  }  cout<<endl;  }  exchange(sum,3);  cout<<"R(3)的传递闭包关系图如下:"<<endl;  for(int i=1;i<=sum;i++)  {  int ff=0;  for(int j=1;j<=sum;j++)  {  if(ff++!=0)  cout<<' ';  cout<<temp1[i][j];  }  cout<<endl;  }  exchange(sum,4);  cout<<"R(4)的传递闭包关系图如下:"<<endl;  for(int i=1;i<=sum;i++)  {  int ff=0;  for(int j=1;j<=sum;j++)  {  if(ff++!=0)  cout<<' ';  cout<<temp1[i][j];  }  cout<<endl;  }  return 0;
}  

菜鸟的总结:在计算机里面计算矩阵的话,or 和 | 和 || ,and和 & 和 &&是一样的。想知道为什么吗? 哈哈,去看一下,位操作那一张呗!

运行结果如下:

请输入你的矩阵边数:
4
请输入各边的关系:
0 1 0 0
0 0 1 1
1 1 0 1
1 0 0 0
R(1)的传递闭包关系图如下:
0 1 0 0
0 0 1 1
1 1 0 1
1 1 0 0
R(2)的传递闭包关系图如下:
0 1 1 1
0 0 1 1
1 1 1 1
1 1 1 1
R(3)的传递闭包关系图如下:
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
R(4)的传递闭包关系图如下:
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1--------------------------------
Process exited after 18.12 seconds with return value 0
请按任意键继续. . .

离散复习资料之一(Warshall算法)相关推荐

  1. 华南师范大学陈卫东算法设计与分析研究生考试复习资料

      最近要考试搜索了一下,发现网上并没有该复习资料.本来打算直接CSDN上传文件算了,结果设置免费想要下载还是要做任务,给我整无语了,这一点都不开源,因此把这份资料放在GitHub上供大家自由获取. ...

  2. c语言缓冲池管理算法,操作系统复习资料

    操作系统复习资料 第一章操作系统概论 一.选择 1.操作系统的基本类型主要有__________. A.批处理系统.分时系统和多任务系统 D.实时系统.分时系统和多用户系统 2.操作系统的______ ...

  3. [渝粤教育] 西南科技大学 计算机网络应用基础 在线考试复习资料2021版(1)

    计算机网络应用基础--在线考试复习资料2021版 一.单选题 1. 在数字通信中广泛采用CRC循环冗余码的原因是CRC可以(  ). A. 检测出一位差错 B. 检测并纠正一位差错     C. 检测 ...

  4. 计算机控制实时的概念,计算机控制系统复习资料..doc

    计算机控制系统复习资料. 计算机控制系统复习 第一章·绪论 一.计算机控制系统的基本结构,控制过程,实时概念? 基本结构: 控制过程:1数据采集及处理 2.实时控制和信息处理 实施概念:信号的输入计算 ...

  5. 《大数据分析入门》期末复习资料

    期末复习资料,仅供参考. 1.数据分析工具不包括以下()选项. A.SPSSStatisticsB.Matlab2014bC.OFFICEPowerpointD.StyleIntelligence 参 ...

  6. 计算机科学导论南开大学,南开大学计算机科学导论复习资料.docx

    南开大学<计算机科学导论>课程期末复习资料 1. 17 世纪 ,( A )发明了第一个数字计算器 A. Pascal B. Leibniz C. Jacquard D.Babbage 2. ...

  7. 材料成型计算机模拟第三版,材料成型计算机模拟考试复习资料.doc

    材料成型计算机模拟考试复习资料 一.判断题(共5分)1. Anycasting是一款基于有限元原理的模拟铸造成型过程的数值分析软件. ( × ) 2. 相对于有限元法,有限差分法的弱项在于应力分析. ...

  8. 2018人工智能期末考试复习资料(一):学术篇

    机器之心知识委员会 机心通知函[2018]002号 2018 年人工智能专业期末考试复习资料:学术篇 各人工智能研究者.工程师.从业人: 2018 年是人工智能迅猛发展的一年,从技术研究到产业应用都取 ...

  9. [渝粤教育] 西南科技大学 程序设计语言VB 在线考试复习资料(1)

    程序设计语言VB--在线考试复习资料 一.单选题 1.列表项选择后得到的选中索引是指(). A.Value B.ListValue C.Index D.ListIndex 2.为了隐藏一个窗体,所使用 ...

最新文章

  1. 20170507Linux七周二次课 io监控free ps 网络状态 抓包
  2. 基于Proxy的小程序状态管理
  3. python统计个数的函数_Python
  4. 计算机管理未指定错误,win10系统计算机管理打不开显示有“未指定的错误”的方案介绍222...
  5. 为何说国内云桌面已经步入成熟期
  6. Linux下必须知道的网络命令(持续更新)
  7. Git笔记(10) 别名
  8. MySQL 的 Web 界面、前端或 GUI 工具
  9. 2G退网 对用户影响几何?
  10. 英语总结系列(二十六):唠唠我的二月英语历程
  11. 让jquery构造出类
  12. android jni示例_Android动画示例
  13. 【优化求解】基于matlab粒子群算法求解仓库成本控制优化问题【含Matlab源码 1577期】
  14. Maxwell 是什么?
  15. 有限元编程示例matlab + C++
  16. LeetCode781森林中的兔子题解
  17. linux桌面只运行浏览器,分享|4 个 Linux 桌面上的轻量级图像浏览器
  18. 海鲜和水果不能一起吃吗?
  19. 微信“小程序”来了,短期不可高估,长期不可低估
  20. 百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数

热门文章

  1. Dell R720xd服务器装机暨改造过程
  2. 【干货】成功解决了无法进入系统的问题
  3. 根据ebp/rbp/fp获取backtrace
  4. 入驻快手小店需要什么条件?快手小店如何开通?
  5. 计算机大赛搞笑队名,电子设计大赛队名
  6. Mac之MySQL初始数据库密码问题
  7. android 13 热点启动流程
  8. mac mysql docker_Mac上使用Docker如何快速启动MySQL测试
  9. 译后访谈《Scratch少儿趣味编程》作者阿部和广
  10. win10删除*某些设置由你的组织来管理