设计求关系R的传递闭包的Warshall算法
时间: 2023-10-19 18:07:27 浏览: 130
利用Warshall算法求二元关系的可传递闭包.docx
Warshall算法是一种求解关系的传递闭包的方法,其基本思想是动态地构造一个矩阵,用于表示已知关系的传递闭包。
具体步骤如下:
1. 初始化一个二维矩阵R,用于表示已知的关系。
2. 对于矩阵R的每个元素(i,j),如果它的值为1,则将(i,j)加入传递闭包。
3. 对于矩阵R的每个元素(i,j),如果它的值为0,则检查是否存在一个中间节点k,使得(i,k)和(k,j)都在传递闭包中。如果存在这样的k,则将(i,j)加入传递闭包。
4. 重复步骤3,直到传递闭包不再发生变化。
实现Warshall算法的伪代码如下:
```
for i from 1 to n
for j from 1 to n
if R[i][j] = 1
T[i][j] = 1
else
T[i][j] = 0
for k from 1 to n
for i from 1 to n
for j from 1 to n
T[i][j] = T[i][j] or (T[i][k] and T[k][j])
```
其中,R为原始关系矩阵,T为传递闭包矩阵,n为关系矩阵的维数。在算法执行完毕后,T即为关系的传递闭包矩阵。
阅读全文