00001 #ifndef MATCHING_H
00002 #define MATCHING_H
00003
00004 #include <boost/foreach.hpp>
00005 #include <boost/graph/adjacency_list.hpp>
00006 #include <boost/graph/adjacency_matrix.hpp>
00007 #include <boost/graph/connected_components.hpp>
00008 #include <boost/graph/iteration_macros.hpp>
00009 #include <boost/graph/graph_traits.hpp>
00010 #include <boost/property_map/property_map.hpp>
00011 #include <cstdarg>
00012 #include <iostream>
00013 #include <scil/core/cutTree.h>
00014 #include <scil/scil.h>
00015
00016 namespace SCIL {
00017
00022 template <typename Graph>
00023 class MATCHING : public sym_constraint {
00024
00025
00026
00027 private:
00028
00029 typedef boost::graph_traits<Graph> GraphTraits;
00030 typedef typename GraphTraits::vertex_descriptor vertex_descriptor;
00031 typedef typename GraphTraits::edge_descriptor edge_descriptor;
00032
00033 Graph& G;
00034 map<vertex_descriptor, int> NC;
00035 map<vertex_descriptor, int> nid;
00036 var_map<edge_descriptor>& VM;
00037 int* os;
00038 int* ot;
00039 double* oc;
00040 int* cts;
00041 int* ctt;
00042 double* ctc;
00043 edge_descriptor* edg;
00044 bool perfect;
00045
00048 int exactBlossomSeparation(subproblem& S);
00049
00052 int heuristicBlossomSeparation(subproblem& S);
00053
00054 public:
00062
00063 MATCHING(Graph& G_, map<vertex_descriptor, int>& NC_,
00064 var_map<edge_descriptor>& VM_, bool perfect_ = true);
00065
00067 ~MATCHING();
00068
00070 void init(subproblem& S);
00071
00074 status standard_separation(subproblem& S);
00075
00078 status fast_separation(subproblem& S);
00079
00082 status feasible(solution& S);
00083
00086 void info();
00087 };
00088
00089 };
00090
00091 #include "../../../src/constraints/matching.cc"
00092 #endif