Floyd算法
Floyd算法特点:
1.时间复杂度高
2.编写简单
3.可以处理负权边
4.可以用来计算传递闭包
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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) 编辑 收藏 举报