1. /**
  2. *
  3. * @author Zen Johnny
  4. * @date 2018年3月31日 下午8:13:09
  5. *
  6. */
  7. package freeTest;
  8. /*
  9. 【动态规划系列:Warshall算法】
  10.  
  11. 问题定义:
  12. 一个顶点有向图的传递闭包可以定义为一个n阶布尔矩阵T={t(i,j)};
  13. 如果从第i个顶点之间存在一条有效的有向路径(即 长度大于0的有向路径),
  14. 矩阵第i行(1<=i<=n)第j列(1<=j<=n)的元素为1,否则为,t(i,j)为0
  15.  
  16. 问题:计算有向图内各点传递闭包(可达矩阵).
  17.  
  18. 思路:利用中间顶点,遍历以中间顶点为点的所有可达的路径;共计n趟。
  19. */
  20.  
  21. public class Warshall {
  22.  
  23. public static void print(int graph[][]) {
  24. for(int i=0,len_side = graph.length;i<len_side;i++) {
  25. for(int j=0;j<len_side;j++) {
  26. System.out.printf("%d ", graph[i][j]);
  27. }
  28. System.out.println();
  29. }
  30. }
  31.  
  32. public static int[][] warshall (int graph[][]) {
  33. for(int i=0,len_side = graph.length;i<len_side;i++) {
  34. for(int j=0;j<len_side;j++) {
  35. if(graph[i][j]!=0) {
  36. for(int k=0;k<len_side;k++) {
  37. if(graph[k][i]!=0)
  38. graph[k][j] = 1;
  39. }
  40. }
  41. }
  42. }
  43. return graph;
  44. }
  45.  
  46. public static void main(String args[]) {
  47. int [][] graph = new int[][] {
  48. {0,1,1,0},
  49. {0,0,0,1},
  50. {0,0,0,0},
  51. {1,0,1,0}
  52. };
  53. print(warshall(graph));
  54. }
  55.  
  56. }

Output:

  1. 1 1 1 1
  2. 1 1 1 1
  3. 0 0 0 0
  4. 1 1 1 1

[C++]动态规划系列之Warshall算法的更多相关文章

  1. 动态规划系列(零)—— 动态规划(Dynamic Programming)总结

    动态规划三要素:重叠⼦问题.最优⼦结构.状态转移⽅程. 动态规划的三个需要明确的点就是「状态」「选择」和「base case」,对应着回溯算法中走过的「路径」,当前的「选择列表」和「结束条件」. 某种 ...

  2. WarShall算法

    1.引言 图的连通性问题是图论研究的重要问题之一,在实际中有着广泛的应用.例如在通信网络的联通问题中,运输路线的规划问题等等都涉及图的连通性.因此传递闭包的计算需要一个高效率的算法,一个著名的算法就是 ...

  3. Gym 101873D - Pants On Fire - [warshall算法求传递闭包]

    题目链接:http://codeforces.com/gym/101873/problem/D 题意: 给出 $n$ 个事实,表述为 "XXX are worse than YYY" ...

  4. SM系列国密算法(转)

    原文地址:科普一下SM系列国密算法(从零开始学区块链 189) 众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2).SM2.SM3.SM4.SM7. ...

  5. POJ 2253 Frogger(warshall算法)

    题意:湖中有很多石头,两只青蛙分别位于两块石头上.其中一只青蛙要经过一系列的跳跃,先跳到其他石头上,最后跳到另一只青蛙那里.目的是求出所有路径中最大变长的最小值(就是在到达目的地的路径中,找出青蛙需要 ...

  6. Warshall算法求传递闭包及具体实现

    传递闭包 在数学中,在集合 X 上的二元关系 R 的传递闭包是包含 R 的 X 上的最小的传递关系. 例如,如果 X 是(生或死)人的集合而 R 是关系“为父子”,则 R 的传递闭包是关系“x 是 y ...

  7. 底层算法系列:Paxos算法

    关于算法,面太广.本系列只研究实际应用中遇到的核心算法.了解这些算法和应用,对java码农进阶是很有必要的. 对于Paxos学习论证过程中,证实一句话:有史以来学习paxos最好的地方wiki:Pax ...

  8. 70. Climbing Stairs【leetcode】递归,动态规划,java,算法

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  9. [机器学习系列] k-近邻算法(K–nearest neighbors)

    C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...

随机推荐

  1. 移动端利用-webkit-box水平垂直居中(旧弹性盒)

    新弹性盒水平垂直居中参考:http://www.cnblogs.com/ooo0/p/7562884.html 新旧弹性盒样式参考:http://www.cnblogs.com/ooo0/p/7562 ...

  2. postman 介绍

  3. unsigned 变量名:n

    在结构体内定义位,节省空间 /* * size是字节数 * addr是打印的起始地址 */ static void printb(void * addr,size_t size){ ;i<siz ...

  4. JS生成随机数并排序

    JS生成[10,100]之间的十个随机数,并排序 function getRandom(start,end){ var m=end-start+1 return Math.floor(Math.ran ...

  5. selenium-网站demo学习-test Design-优化自动化代码

    看selenium的网站的文档,里面的自动化用例设计有一些小点很靠谱.学了很多,可以用作优化自己的代码. 1.测试类型: Testing Static Content Testing Links Fu ...

  6. P3358 最长k可重区间集问题

    题目链接 \(Click\) \(Here\) 这题的写法非常巧妙. 每个位置的点向它的下一个位置连一个容量为\(INF\)的边,从区间的左端点往右端点拉一条容量为\(1\),费用为区间长度的边,从起 ...

  7. 【清北学堂2018-刷题冲刺】Contest 3

     比较数学的一场,难度稍大. Task 1:数数 [问题描述]  fadbec 很善于数数,⽐如他会数将a 个红球,b 个黄球,c 个蓝球,d个绿球排成⼀列,求出任意相邻不同⾊的方案数⽬.  现在R ...

  8. HTML5(FileRdeader)

    主要作用: 异步读取存储在用户计算机上的文件(或原始缓冲区的内容),使用File或Blob对象指定要读取的文件或数据.其中File是input元素上选择文件后返回的FileList对象,也可以是拖放操 ...

  9. python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数

    目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...

  10. ansible小结常用模块

    根据官方的分类,将模块按功能分类为:云模块.命令模块.数据库模块.文件模块.资产模块.消息模块.监控模块.网络模块.通知模块.包管理模块.源码控制模块.系统模块.单元模块.web设施模块.window ...