warshell

王朝百科·作者佚名  2010-08-14  
宽屏版  字体: |||超大  

Warshell 算法 用来求有向图的传递闭包

设R的关系矩阵为M

Mt为在R关系上的传递闭包那么:

Mt = M + M^2 + M^3 +......M^n;

Warshell 算法(时间复杂度O(n^3))

思想:动态规划(记忆式)

用动态规划求关系的传递闭包

#include<iostream>

using namespace std;

bool M[100][100];//布尔数组;

void main()

{

int n;

cout<<"请输入矩阵维数:";

cin>>n;

cout<<"请输入关系矩阵:"<<endl;

int i,j,k;

while(n)

{

for(i =1; i <= n; i++)

for(j = 1; j <= n; j++)

cin>>M[i][j];

for(k = 1; k <= n; k++)

for(i = 1; i <= n; i++)

for(j = 1; j <= n; j++)

M[i][j] = M[i][j] + M[i][k]*M[k][j];//布尔数进行的是逻辑加乘;

cout<<"传递闭包:"<<endl;

for(i = 1; i <= n; i++)

{

for(j = 1; j <= n; j++)

cout<<M[i][j]<<" ";

cout<<endl;

}

}

}

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有