普里姆-最小生成树
具体代码
#include <stdio.h>
#define MAX 10
int graph[ MAX] [ MAX] ;
void Prim ( int graph[ ] [ MAX] , int vexnum) {
int lowcast[ MAX] , mst[ MAX] ;
for ( int i= 1 ; i<= vexnum; i++ ) {
mst[ i] = 1 ;
lowcast[ i] = graph[ 1 ] [ i] ;
}
mst[ 1 ] = 0 ;
for ( int i= 2 ; i<= vexnum; i++ ) {
for ( int k= 1 ; k<= vexnum; k++ ) {
printf ( "%d " , lowcast[ k] ) ;
}
printf ( "\n" ) ;
int min= 9 , minid= 0 ;
for ( int j= 2 ; j<= vexnum; j++ ) {
if ( lowcast[ j] < min&& lowcast[ j] != 0 ) {
min= lowcast[ j] ;
minid= j;
}
}
printf ( "%d->%d->%d\n" , mst[ minid] , graph[ mst[ minid] ] [ minid] , minid) ;
lowcast[ minid] = 0 ;
for ( int j= 2 ; j<= vexnum; j++ ) {
if ( graph[ minid] [ j] < lowcast[ j] ) {
lowcast[ j] = graph[ minid] [ j] ;
mst[ j] = minid;
}
}
}
}
int main ( ) {
int vexnum= 6 , arcnum= 9 ;
for ( int i= 1 ; i<= vexnum; i++ ) {
for ( int j= 1 ; j<= vexnum; j++ ) {
graph[ i] [ j] = 9 ;
}
}
graph[ 1 ] [ 4 ] = 5 ;
graph[ 3 ] [ 4 ] = 5 ;
graph[ 1 ] [ 3 ] = 1 ;
graph[ 4 ] [ 6 ] = 2 ;
graph[ 2 ] [ 5 ] = 3 ;
graph[ 2 ] [ 3 ] = 5 ;
graph[ 3 ] [ 5 ] = 6 ;
graph[ 1 ] [ 2 ] = 6 ;
graph[ 3 ] [ 6 ] = 4 ;
for ( int i= 1 ; i<= vexnum; i++ ) {
for ( int j= 1 ; j<= i; j++ ) {
graph[ i] [ j] = graph[ j] [ i] ;
}
}
for ( int i= 1 ; i<= vexnum; i++ ) {
for ( int j= 1 ; j<= vexnum; j++ ) {
printf ( "%d " , graph[ i] [ j] ) ;
}
printf ( "\n" ) ;
}
Prim ( graph, vexnum) ;
}