src/work/athos/kruskal.h
changeset 485 7f461ab4af1a
child 921 818510fa3d99
equal deleted inserted replaced
-1:000000000000 0:fda4062d194c
       
     1 /*
       
     2 Kruskal's algorithm to find a spanning tree of minimum weight
       
     3 If the graph is not connected, it gives a forest. 
       
     4 */
       
     5 #ifndef KRUSKAL_H
       
     6 #define KRUSKAL_H
       
     7 
       
     8 #include <union_find.h>
       
     9 
       
    10 namespace hugo {
       
    11   
       
    12   template <typename graph_type, typename T>
       
    13     class Kruskal {
       
    14 
       
    15     
       
    16     //Hasznos typedef-ek
       
    17     typedef typename graph_type::NodeIt NodeIt;
       
    18     typedef typename graph_type::EdgeIt EdgeIt;
       
    19     typedef typename graph_type::EachNodeIt EachNodeIt;
       
    20     typedef typename graph_type::EachEdgeIt EachEdgeIt;
       
    21     typedef typename graph_type::SymEdgeIt SymEdgeIt;
       
    22 
       
    23     //input
       
    24     graph_type& G;
       
    25     typename graph_type::EdgeMap<T> &weight;
       
    26 
       
    27     //Auxilliary variables
       
    28     typename graph_type::NodeMap<int> component(flowG);
       
    29 
       
    30     Kruskal(
       
    31 	    graph_type& _G, 
       
    32 	    typename graph_type::EdgeMap<T> & _weight)
       
    33       : G(_G),
       
    34       weight(_weight),
       
    35       component(-1)
       
    36       { 
       
    37       }
       
    38 
       
    39       /*Originally by Misi.*/
       
    40       struct Edge_comp
       
    41       {
       
    42 	NodeMap<graph_type, T> &d;
       
    43 	Node_dist_comp(NodeMap<graph_type, T> &_d) : d(_d) {} 
       
    44 	
       
    45 	bool operator()(const NodeIt& u, const NodeIt& v) const 
       
    46 	{ return d.get(u) < d.get(v); }
       
    47       };
       
    48 
       
    49 
       
    50       //Runs the algorithm
       
    51       void run() {
       
    52 	
       
    53 
       
    54 	
       
    55       }
       
    56      
       
    57   }
       
    58 
       
    59 }//namespacc hugo
       
    60 
       
    61 #endif