普通的求关系闭包的算法的时间复杂度是n的四次方,这个算法是n的三次方,Warshall因此获得图林奖。
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
int n_dim=0;
cout<<"Input number of dimensions:";
cin>>n_dim;
char **array=new char*[n_dim]; //以下是动态创建一个 n_dim*n_dim 数组,如不太清楚的看我BLOG里的
char ch; //另一篇关于动态数组的文章
for(int i=0;i<n_dim;i++)
{
array[i]=new char[n_dim]; //这句也是
for(int j=0;j<n_dim;j++)
{
cin>>ch;
array[i][j]=ch;
}
}
for(i=0;i<n_dim;i++)
for(int j=0;j<n_dim;j++)
for(int k=0;k<n_dim;k++)
if(array[i][j]=='1'&&array[k][i]=='1')
array[k][j]='1';
cout<<"The trasitive closure of a relation R represented:"<<endl;
for(i=0;i<n_dim;i++)
{
for(int j=0;j<n_dim;j++)
cout<<array[i][j];
cout<<endl;
}
}