传递闭包:图-传递闭包
来源: 发布时间:星期四, 2009年2月12日 浏览:84次 评论:0
图  传递闭包是指修正后  邻接矩阵表示  图  在多个顶点  有向图中  每个顶点可以到按照方向到达  定  节点  这叫图  连通性  有种思路方法直接告诉我们  图中  两个节点是否可以联通  这里说  是WarShall算法 WarShall  基本原理是  如果A可以到达B  且C可以到达A  则C可以到达B  通过对邻接矩阵  修正可以做到这点  随然这里举例是将两步可并成  步  但数学上可以证明这种修正可以达到任意步骤 下面是代码: Java代码  WarShall { private boolean   adjMat; WarShall(  size) { adjMat =  boolean[size][size]; } void connect(  from,  to) { adjMat[from][to] = true; } boolean isConnect(  from,  to) {  adjMat[from][to]; } void warshall  { //warshall算法 for(  y=0; y<adjMat.length; y  ) //查找每  行 for(  x=0; x<adjMat.length; x  ) // 查找每个单元格  (adjMat[y][x]) //如果 y 可以到达 x for(  z=0; z<adjMat.length; z  ) //查找所有行  y列 //如果 z 可以到达y  介绍说明z 可以直接到达x  (adjMat[z][y]) adjMat[z][x] = true; } boolean   getConnections  {  adjMat; } public  void  (String  args) { WarShall w =  WarShall(5); w.connect(0,2); w.connect(1,0); w.connect(1,4); w.connect(3,4); w.connect(4,2); for(boolean  a: w.getConnections  ) { for(boolean b: a)  .out.pr  (b + " ");  .out.pr  ln  ; } w.warshall  ;  .out.pr  ln("          "); for(boolean  a: w.getConnections  ) { for(boolean b: a)  .out.pr  (b + " ");  .out.pr  ln  ; } assert w.isConnect(3,2); } }
相关文章
读者评论
发表评论
|
|