最小生成树 -- Prim算法
来源:互联网 发布:ubuntu install go 编辑:程序博客网 时间:2024/05/16 02:02
#include <iostream>#include <climits>#include <cstring>using namespace std;#define INF INT_MAX#define SIZE 6int matrix[SIZE][SIZE] = { { INF, 6, 1, 5, INF, INF }, { 6, INF, 5, INF, 3, INF }, { 1, 5, INF, 5, 6, 4 }, { 5, INF, 5, INF, INF, 2 }, { INF, 3, 6, INF, INF, 6 }, { INF, INF, 4, 2, 6, INF }};void prim(){ bool flag[SIZE]; int adjecent[SIZE]; int nearest[SIZE]; int j, min; memset( flag, false, sizeof( bool ) * SIZE ); flag[0] = true; for( int i = 0; i < SIZE; ++i ){ nearest[i] = matrix[0][i]; adjecent[i] = 0; } int count = SIZE; while( --count ){ min = INF; j = 0; for( int i = 0; i < SIZE; ++i ){ if( flag[i] == false && nearest[i] < min ){ min = nearest[i]; j = i; } } flag[j] = true; cout << j << "-" << adjecent[j] << " " << matrix[j][adjecent[j]] << endl; for( int i = 0; i < SIZE; ++i ){ if( flag[i] == false && matrix[j][i] < nearest[i] ){ nearest[i] = matrix[j][i]; adjecent[i] = j; } } }}int main(){ prim(); return 0; }