******** fig9.58 ********** void kruskal( graph G ) { unsigned int edges_accepted; DISJ_SET S; PRIORITY_QUEUE H; vertex u, v; set_type u_set, v_set; edge e; /*1*/ initialize( S ); /*2*/ read_graph_into_heap_array( G, H ); /*Not really an ADT operation */ /*3*/ build_heap( H ); /*4*/ edges_accepted = 0; /*5*/ while( edges_accepted < NUM_VERTEX-1 ) { /*6*/ e = delete_min( H ); /* e = (u, v ) */ /*7*/ u_set = find( u, S ); /*8*/ v_set = find( v, S ); /*9*/ if( u_set != v_set ) { /*10*/ /* accept the edge */ /*11*/ edges_accepted++; /*12*/ set_union( S, u_set, v_set ); } } }