Warshall算法和Floyd算法

来源:互联网 发布:淘宝点了退款怎么取消 编辑:程序博客网 时间:2024/05/22 11:55

 求有向图的传递闭包的warshall算法和计算全部最短路径的floyd算法,他们在本质上都是基于相同的思想,而且都是动态规划的一个应用方面.

#include <iostream>
using namespace std;
const int  MAX=65532;
int a[4][4]={{0,1,0,0},{0,0,0,1},{0,0,0,0},{1,0,1,0}};
int b[4][4]={{0,MAX,3,MAX},{2,0,MAX,MAX},{MAX,7,0,1},{6,MAX,MAX,0}};

void warshall(int a[4][4])
{
 for(int k=0;k<4;k++)
  for(int i=0;i<4;i++)
   for(int j=0;j<4;j++)
   {
    //if(a[i][j]==0)
    //{
     a[i][j]=a[i][j]|a[i][k]&a[k][j];
    //}
   }
}

void floyd(int a[4][4])
{
 for(int k=0;k<4;k++)
  for(int i=0;i<4;i++)
   for(int j=0;j<4;j++)
   {
    //if(a[i][j]==0)
    //{
    a[i][j]=a[i][j]<(a[i][k]+a[k][j])?a[i][j]:a[i][k]+a[k][j];
    //}
   }
}

int main()
{
 //warshall(a);
  floyd(b);
 for(int i=0;i<4;i++)
 {
  for(int j=0;j<4;j++)
   printf("%d  ",b[i][j]);
  printf("/n");
 }
}