title author date CreateTime categories
图论 Warshall 和Floyd 矩阵传递闭包
lindexi
2018-2-13 17:23:3 +0800
2018-2-13 17:23:3 +0800

我们来说下有向图,一般的有向图也是图,图可以分为稠密图,稀疏图,那么从意思上,稠密图就是点的边比较多,稀疏图就是边比较少的图。为什么稠密图放在矩阵比较省空间,因为邻接表在边之间存储需要多余的指针,而矩阵不需要。

下面这张图:http://blog.csdn.net/tham_/article/details/46048063

我们只说有向图,我们把有向图存在矩阵

我们先说Warshall,假如我们有一张图

我们把这张图存储在矩阵

首先是a,a可以直接到b,那么ab就�首先我们先说下图论,一般图存储可以使用邻接矩阵,或邻接表,一般使用邻接矩阵在稠密图比较省空间。

我们来说下有向图,一般的有向图也是图,图可以分为稠密图,稀疏图,那么从意思上,稠密图就是点的边比较多,稀疏图就是边比较少的图。为什么稠密图放在矩阵比较省空间,因为邻接表在边之间存储需要多余的指针,而矩阵不需要。

下面这张图:http://blog.csdn.net/tham_/article/details/46048063

我们只说有向图,我们把有向图存在矩阵

我们先说Warshall,假如我们有一张图

我们把这张图存储在矩阵

首先是a,a可以直接到b,那么ab就是1
接着就是b,b可以直接到c,那么bc就是1

Warshall a b c d e
a 0 1 0 0 0
b 0 0 1 0 0
c 0 0 0 1 0
d 1 0 0 0 1
e 0 0 0 0 0

那么Warshall怎么做,他需要做个十字形,因为有个定理,

$$ R_{ij} = R_{ik} \cup R_{kj} $$

其中ijk都是从0到n,这里n是点个数

那么我们得到的第一个矩阵,叫做$$ R^0 $$
那么由第一个矩阵变化出第二个矩阵就叫$$ R^1 $$
然后一直到n,这里n是点个数

如何变化,其实很简单,做个十字,这里说的十字是

那么我们第一个公式就可以来

我们选择一个点

如果在十字两个都是1,那么这个点也就改为1,因为图里只有一个点可以修改,所以修改完就是

$$R^1$$

接着我们把十字修改

那么发现有两个点,加粗db是上次修改的

我们可以发现ac和dc都是可以修改

那么继续修改

修改后

Warshall a b c d e
a 1 1 1 1 1
b 1 1 1 1 1
c 1 1 1 1 1
d 1 1 1 1 1
e 0 0 0 0 0

因为我们从a到d都是可以到达,所以都为1,因为存在d可以到e,所以所有点都可以到e,因为e本身没有到任何点,所以为0

那么Floyd是什么,其实就是把原先的矩阵1改为数字

Floyd是可以算图中任意两个点的最短路径

那么说道这,我们需要带权有向图

带权就是两个点之间的边有个权,放在矩阵就是可以相连的两个点之间的ij为权

1

Warshall a b c d e
a 0 5 $$\infty$$ $$\infty$$ $$\infty$$
b $$\infty$$ 0 2 $$\infty$$ $$\infty$$
c $$\infty$$ $$\infty$$ 0 1 $$\infty$$
d 6 15 $$\infty$$ 0 1
e $$\infty$$ $$\infty$$ $$\infty$$ $$\infty$$ 0

我们和之前Warshall一样做十字,然后判断是得到

$$R_{ij}=min{R_{ij},R_{ik}+R_{kj}}$$

那么这样就可以得到任意两点路径

算法复杂$$O(n^3)$$

在Warshall是判断两个都为1,修改,Floyd判断两个加起来的值比当前的小,修改

2018-2-13-图论-Warshall-和Floyd-矩阵传递闭包的更多相关文章

  1. 图论 Warshall 和Floyd 矩阵传递闭包

    首先我们先说下图论,一般图存储可以使用邻接矩阵,或邻接表,一般使用邻接矩阵在稠密图比较省空间. 我们来说下有向图,一般的有向图也是图,图可以分为稠密图,稀疏图,那么从意思上,稠密图就是点的边比较多,稀 ...

  2. poj 3613 经过k条边最短路 floyd+矩阵快速幂

    http://poj.org/problem?id=3613 s->t上经过k条边的最短路 先把1000范围的点离散化到200中,然后使用最短路可以使用floyd,由于求的是经过k条路的最短路, ...

  3. (转)新手C#SQL语句的学习2018.08.13

    1.创建数据库(create) CREATE DATABASE database-name 2.删除数据库(drop) drop database dbname 3.备份数据库 --- 创建 备份数据 ...

  4. 【floyd+矩阵乘法】POJ 3613 Cow Relays

    Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a rel ...

  5. UVa(247),Floyd做传递闭包

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  6. UVA - 247 Calling Circles(Floyd求传递闭包)

    题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...

  7. 图论学习笔记·$Floyd$ $Warshall$

    对于图论--虽然本蒟蒻也才入门--于是有了这篇学习笔记\(qwq\) 一般我们对于最短路的处理,本蒟蒻之前都是通过构建二维数组的方式然后对每两个点进行1次深度或者广度优先搜索,即一共进行\(n\)^2 ...

  8. 图论之最短路径floyd算法

    Floyd算法是图论中经典的多源最短路径算法,即求任意两点之间的最短路径. 它可采用动态规划思想,因为它满足最优子结构性质,即最短路径序列的子序列也是最短路径. 举例说明最优子结构性质,上图中1号到5 ...

  9. POJ 3660 Cow Contest(Floyd求传递闭包(可达矩阵))

    Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16341   Accepted: 9146 Desc ...

  10. 【Floyd矩阵乘法】BZOJ1706- [usaco2007 Nov]relays 奶牛接力跑

    [题目大意] 给出一张无向图,求出恰巧经过n条边的最短路. [思路] 首先题目中只有100条边,却给出了10000个点(实际上最多只能有200个),离散化一下. 后面就是Floyd的新姿势,以前看过的 ...

随机推荐

  1. win 7下安装mysql zip格式

    mysql 下载地址:https://dev.mysql.com/downloads/mysql/5.5.html#downloads 下载的mysql格式为zip: 下载完成放在除C盘以外的盘. 一 ...

  2. org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]

    从hibernate3升级到4应该会遇到 应该添加引用 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 ...

  3. ORACLE忘记sys密码

    1.win+R打开dos窗口cmd 2.输入 sqlplus/nolog出现 3.输入 conn / as sysdba 出现 4.修改密码 alter user 用户 identified by 新 ...

  4. python 可迭代对象,迭代器,生成器的区别及使用

    可迭代对象 可迭代对象类型:list,dict,tuple,str,set,deque等 如何判断一个对象是否是可迭代对象,可以通过dir()方法看它里面有没有__iter__方法,如果有这个方法就是 ...

  5. eureka注册中心设置用户名密码

    1.加入安全认证依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...

  6. storm-jdbc的使用

    最近项目组分配到研究storm-jdbc用法 发现网上关于insert和query方法挺多的,但是自定义方法很少.而且用法上也挺多缺陷.在此自己总结记录一下 JdbcInsertBolt 的核心代码 ...

  7. 2019-4-6-VisualStudio-编码规范工具-2.6-修改当前文件编码

    title author date CreateTime categories VisualStudio 编码规范工具 2.6 修改当前文件编码 lindexi 2019-04-06 15:31:53 ...

  8. sudo 授权许可使用的su,也是受限制的su

    sudo 的适用条件: 由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统.如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行 ...

  9. Hadoop IO 特性详解(2)【文件校验】

    (本文引用了microheart,ggjucheng的一些资料,在此感谢.charles觉得知识无价,开源共享无价) 这一次我们接着分析文件IO校验的相关代码,看看最底层是如何实现这种大数据集的文件校 ...

  10. PyCharm软件代码配色和字体设置

    配置效果图: 1.字体设置: 2.tab键设置: 3.代码颜色配置: 注释颜色为: 类名称: 函数: 关键字: 关键字参数: 函数参数: 字符串: