1. 程式人生 > >waeshall演算法原理和實現

waeshall演算法原理和實現

## 傳遞閉包Warshall方法簡要介紹 >① 在集合X上的二元關係R的傳遞閉包是包含R的X上的最小的傳遞關係。R的傳遞閉包在數字影象處理的影象和視覺基礎、圖的連通性描述等方面都是基本概念。一般用B表示定義在具有n個元素的集合X上關係R的n×n二值矩陣,則傳遞閉包的矩陣B+可如下計算: B+ = B + B2 + B3 + ……+ (B)n > >② 式中矩陣運算時所有乘法都用邏輯與代替,所有加法都用邏輯或代替。上式中的操作次序為B,B(B),B(BB),B(BBB),……,所以在運算的每一步我們只需簡單地把現有結果乘以B。 ## warshall演算法的運算規則 >其具體過程如下,設在n個元素的有限集上關係R的關係矩陣為M: >  (1)置新矩陣A=M; >  (2)置k=1; >  (3)對所有i如果A[i,k]=1,則對j=1..n執行: >     A[i,j]←A[i,j]∨A[k,j]; >  (4)k增1; >  (5)如果k≤n,則轉到步驟(3),否則停止。 >  所得的矩陣A即為關係R的傳遞閉包t(R)的關係矩陣。 >![](https://gitee.com/chw-breeze/img/raw/master/imgs/20201116195922.png) > > ## warshall演算法的實現 ```java public class Warshall { static int[][] warshall={ {0,1,1,0}, {0,0,1,0}, {0,0,0,1}, {0,0,1,0} }; public static void main(String[] args) { display(warshall); setWarshell(warshall); System.out.println("經過演算法閉包之後輸出"); display(warshall); } //列印矩陣 public static void display(int[][] warshall){ for (int i = 0; i < warshall.length; i++) { for (int j=0;j