计算传递闭包

//沃舍尔算法计算传递闭包
//warshall:
//W=M
//for k=1 to n
//begin
//  for i=1 to n
//  begin
//    for j=1 to n
//    W(ij)=W(ij)+(W(ik)*W(kj))
//  end
//end
//
//
#include 
using namespace std;
int v,edge;
int** draw();//绘图
void transitive(int **a);//计算


int main(int argc, char const *argv[])
{
	int** a=draw();
	transitive(a);

	delete []a;
	return 0;
}

int** draw()//绘图  
{  
  int i,j;  
  cin>>v>>edge;///输入点数目和边数目 

  int **a=new int*[v];
  for ( i = 0; i < v; ++i)  
    a[i]=new int[v];  

  for ( i = 0; i < v; ++i)  
    for ( j = 0; j < v; ++j)  
      a[i][j]=0;  
  
  int spot1,spot2;  
  for ( i = 0; i < edge; ++i)  
  {  
    cin>>spot1>>spot2;  
    a[spot1][spot2]=1;
  }  
///-------------------------------------------------------------///  
    	cout<<"\n";
    for ( i = 0; i < v; ++i)
    {  
	    for ( j = 0; j < v; ++j)
	    {
	      cout<

//计算传递闭包
//R*=R1+R2+R3+....+Rn
//Rn=Rn-1+R1
//使用矩阵表示
//算法:
//A=M
//B=A
//for(2 to n)
//  begin
//    A=A*M
//    B=B+A
//  end
#include 
using namespace std;
int v,edge;
int** draw();//绘图
void transitive(int **a);//计算


int main(int argc, char const *argv[])
{
	int** a=draw();
	transitive(a);

	delete []a;
	return 0;
}

int** draw()//绘图  
{  
  int i,j;  
  cin>>v>>edge;///输入点数目和边数目 

  int **a=new int*[v];
  for ( i = 0; i < v; ++i)  
    a[i]=new int[v];  

  for ( i = 0; i < v; ++i)  
    for ( j = 0; j < v; ++j)  
      a[i][j]=0;  
  
  int spot1,spot2;  
  for ( i = 0; i < edge; ++i)  
  {  
    cin>>spot1>>spot2;  
    a[spot1][spot2]=1;
  }  
///-------------------------------------------------------------///  
    	cout<<"\n";
    for ( i = 0; i < v; ++i)
    {  
	    for ( j = 0; j < v; ++j)
	    {
	      cout<=1)//if (bb[k][h] || at[k][h])
    			bb[k][h]=1;   
  }
      for ( k = 0; k 


 
  


你可能感兴趣的:(离散,图论)