求传递闭包的 Warshall 算法详解

过程详情

【例子】关系的矩阵是: $$ \boldsymbol{W}_{0}=\left[\begin{array}{llll} 0 & 0 & 0 & 1 \ 1 & 0 & 1 & 0 \ 1 & 0 & 0 & 1 \ 0 & 0 & 1 & 0 \end{array}\right] $$ 求传递闭包。

【分析与解答】


我们看第 1 列:$\pmatrix{0\1\1\0}$。

$\pmatrix{\color{red}0\1\1\0}$ $a_{11}=0$ 跳过。

$\pmatrix{0\\color{blue}1\1\0}$ $a_{\color{green}2\color{red}1}=1$,则 $a_{\color{red}1}$ 行加到 $a_{\color{green}2}$ 行: $$ \boldsymbol{W}=\left[\begin{array}{llll} \color{blue}0 & \color{blue}0 & \color{blue}0 & \color{blue}1 \ 1+\color{blue}0 & 0+\color{blue}0 & 1+\color{blue}0 & 0+\color{blue}1 \ 1 & 0 & 0 & 1 \ 0 & 0 & 1 & 0 \end{array}\right] $$ 得到: $$ \boldsymbol{W}=\left[\begin{array}{llll} 0 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 0 & 1 \ 0 & 0 & 1 & 0 \end{array}\right] $$ $\pmatrix{0\1\\color{blue}1\0}$,$a_{31} = 1$,则 $a_1$ 行加到 $a_3$ 行,得到:

$$ \boldsymbol{W}=\left[\begin{array}{llll} 0 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 0 & 1 \ 0 & 0 & 1 & 0 \end{array}\right] $$ $\pmatrix{0\1\1\\color{red}0}$,$a_{41} = 0$,跳过。


接下来是第二列(注意:不是原矩阵的第二列,而是上面处理后最后的矩阵的第二列,下同):

我们看第 2 列:$\pmatrix{0\0\0\0}$。全是零,意味着 $a_{i2}$ 都跳过处理。


我们看第 3 列:$\pmatrix{0\1\0\1}$

注意到 $a_{23} = 1$,则 $a_3$ 行加到 $a_2$ 行,得到: $$ \boldsymbol{W}=\left[\begin{array}{llll} 0 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 0 & 1 \ 0 & 0 & 1 & 0 \end{array}\right] $$

注意到 $a_{43} = 1$,则 $a_3$ 行加到 $a_4$ 行,得到: $$ \boldsymbol{W}=\left[\begin{array}{llll} 0 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \end{array}\right] $$


我们看第 4 列:$\pmatrix{1\1\1\1}$

注意到 $a_{14}\sim a_{44} = 1$,也就是 $a_4$ 行依次加到上面各行: $$ \boldsymbol{W}=\left[\begin{array}{llll} 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \end{array}\right] $$

$$ \boldsymbol{W}=\left[\begin{array}{llll} 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 0 & 1 \ 1 & 0 & 1 & 1 \end{array}\right] $$

$$ \boldsymbol{W}=\left[\begin{array}{llll} 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \end{array}\right] $$

$$ \boldsymbol{W}=\left[\begin{array}{llll} 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \ 1 & 0 & 1 & 1 \end{array}\right] $$

这就是最终正确答案。

例题

【例子】计算传递闭包之于: $$ \boldsymbol{A}= \begin{bmatrix} 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 1 & 0 & 1 & 0 \end{bmatrix} $$ 【分析与解答】

按列从左到右,每列按行从上到下扫描:

$(4,1) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 0 \end{bmatrix} $$ $(1,2) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 0 & 1 & 0 & 1 \ 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 0 \end{bmatrix} $$ $(4,2) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 0 & 1 & 0 & 1 \ 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \end{bmatrix} $$ $(4,3) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 0 & 1 & 0 & 1 \ 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \end{bmatrix} $$ $(1,4) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \end{bmatrix} $$ $(2,4) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \end{bmatrix} $$ $(4,4) = 1$,故: $$ \boldsymbol{T}= \begin{bmatrix} 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \end{bmatrix} $$ 🦔最终解。


最近发布

要查看全部文章,请点击右上角“归档”