最小生成树 -- 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;    }