Floyd算法

Floyd算法特点:

1.时间复杂度高

2.编写简单

3.可以处理负权边

4.可以用来计算传递闭包

View Code
#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
int N, M, mp[110][110];
const int oo = 0x7f7f7f7f;


int min( int x, int y)
{
 return x < y ? x : y;   
}
void init( )
{
   for( int i = 0; i <= 100; i++)
     for(int j = 0; j <= 100; j++)
       mp[i][j] =  (i == j ) ? 0 : oo;
     
}

void Floyd( )
{
  for( int k = 1; k <= N; k++)
    for( int i = 1; i <= N; i++)
       for( int j = 1; j <= N; j++)
           if( mp[k][j] != oo && mp[i][k] != oo && mp[i][j] > mp[i][k] + mp[k][j] )
           {
              mp[i][j] = mp[i][k] + mp[k][j];    
               
           }
                    
  printf("%d\n", mp[1][N]);
     
}

int main( )
{
  int a, b, c;
  while( scanf("%d%d", &N, &M), N + M)
  {  
     init( );
     for( int i = 1; i <= M; i++)
     {
         scanf("%d%d%d", &a, &b, &c);
         mp[a][b] = mp[b][a] = min(mp[a][b], c);  
          
     }
     Floyd( );
         
  }   
  return 0;  
} 

 

posted on 2012-07-10 09:45  more think, more gains  阅读(205)  评论(0编辑  收藏  举报

导航