1 /* -*- mode: C++; indent-tabs-mode: nil; -*-  | 
     1 /* -*- mode: C++; indent-tabs-mode: nil; -*-  | 
     2  *  | 
     2  *  | 
     3  * This file is a part of LEMON, a generic C++ optimization library.  | 
     3  * This file is a part of LEMON, a generic C++ optimization library.  | 
     4  *  | 
     4  *  | 
     5  * Copyright (C) 2003-2009  | 
     5  * Copyright (C) 2003-2010  | 
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport  | 
     6  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport  | 
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).  | 
     7  * (Egervary Research Group on Combinatorial Optimization, EGRES).  | 
     8  *  | 
     8  *  | 
     9  * Permission to use, modify and distribute this software is granted  | 
     9  * Permission to use, modify and distribute this software is granted  | 
    10  * provided that this copyright notice appears in all copies. For  | 
    10  * provided that this copyright notice appears in all copies. For  | 
   132   mat_test.greedyInit();  | 
   132   mat_test.greedyInit();  | 
   133   mat_test.matchingInit(mat);  | 
   133   mat_test.matchingInit(mat);  | 
   134   mat_test.startSparse();  | 
   134   mat_test.startSparse();  | 
   135   mat_test.startDense();  | 
   135   mat_test.startDense();  | 
   136   mat_test.run();  | 
   136   mat_test.run();  | 
   137     | 
   137   | 
   138   const_mat_test.matchingSize();  | 
   138   const_mat_test.matchingSize();  | 
   139   const_mat_test.matching(e);  | 
   139   const_mat_test.matching(e);  | 
   140   const_mat_test.matching(n);  | 
   140   const_mat_test.matching(n);  | 
   141   const MaxMatching<Graph>::MatchingMap& mmap =  | 
   141   const MaxMatching<Graph>::MatchingMap& mmap =  | 
   142     const_mat_test.matchingMap();  | 
   142     const_mat_test.matchingMap();  | 
   143   e = mmap[n];  | 
   143   e = mmap[n];  | 
   144   const_mat_test.mate(n);  | 
   144   const_mat_test.mate(n);  | 
   145   | 
   145   | 
   146   MaxMatching<Graph>::Status stat =   | 
   146   MaxMatching<Graph>::Status stat =  | 
   147     const_mat_test.status(n);  | 
   147     const_mat_test.status(n);  | 
   148   const MaxMatching<Graph>::StatusMap& smap =  | 
   148   const MaxMatching<Graph>::StatusMap& smap =  | 
   149     const_mat_test.statusMap();  | 
   149     const_mat_test.statusMap();  | 
   150   stat = smap[n];  | 
   150   stat = smap[n];  | 
   151   const_mat_test.barrier(n);  | 
   151   const_mat_test.barrier(n);  | 
   168     const_mat_test = mat_test;  | 
   168     const_mat_test = mat_test;  | 
   169   | 
   169   | 
   170   mat_test.init();  | 
   170   mat_test.init();  | 
   171   mat_test.start();  | 
   171   mat_test.start();  | 
   172   mat_test.run();  | 
   172   mat_test.run();  | 
   173     | 
   173   | 
   174   const_mat_test.matchingWeight();  | 
   174   const_mat_test.matchingWeight();  | 
   175   const_mat_test.matchingSize();  | 
   175   const_mat_test.matchingSize();  | 
   176   const_mat_test.matching(e);  | 
   176   const_mat_test.matching(e);  | 
   177   const_mat_test.matching(n);  | 
   177   const_mat_test.matching(n);  | 
   178   const MaxWeightedMatching<Graph>::MatchingMap& mmap =  | 
   178   const MaxWeightedMatching<Graph>::MatchingMap& mmap =  | 
   179     const_mat_test.matchingMap();  | 
   179     const_mat_test.matchingMap();  | 
   180   e = mmap[n];  | 
   180   e = mmap[n];  | 
   181   const_mat_test.mate(n);  | 
   181   const_mat_test.mate(n);  | 
   182     | 
   182   | 
   183   int k = 0;  | 
   183   int k = 0;  | 
   184   const_mat_test.dualValue();  | 
   184   const_mat_test.dualValue();  | 
   185   const_mat_test.nodeValue(n);  | 
   185   const_mat_test.nodeValue(n);  | 
   186   const_mat_test.blossomNum();  | 
   186   const_mat_test.blossomNum();  | 
   187   const_mat_test.blossomSize(k);  | 
   187   const_mat_test.blossomSize(k);  | 
   205     const_mat_test = mat_test;  | 
   205     const_mat_test = mat_test;  | 
   206   | 
   206   | 
   207   mat_test.init();  | 
   207   mat_test.init();  | 
   208   mat_test.start();  | 
   208   mat_test.start();  | 
   209   mat_test.run();  | 
   209   mat_test.run();  | 
   210     | 
   210   | 
   211   const_mat_test.matchingWeight();  | 
   211   const_mat_test.matchingWeight();  | 
   212   const_mat_test.matching(e);  | 
   212   const_mat_test.matching(e);  | 
   213   const_mat_test.matching(n);  | 
   213   const_mat_test.matching(n);  | 
   214   const MaxWeightedPerfectMatching<Graph>::MatchingMap& mmap =  | 
   214   const MaxWeightedPerfectMatching<Graph>::MatchingMap& mmap =  | 
   215     const_mat_test.matchingMap();  | 
   215     const_mat_test.matchingMap();  | 
   216   e = mmap[n];  | 
   216   e = mmap[n];  | 
   217   const_mat_test.mate(n);  | 
   217   const_mat_test.mate(n);  | 
   218     | 
   218   | 
   219   int k = 0;  | 
   219   int k = 0;  | 
   220   const_mat_test.dualValue();  | 
   220   const_mat_test.dualValue();  | 
   221   const_mat_test.nodeValue(n);  | 
   221   const_mat_test.nodeValue(n);  | 
   222   const_mat_test.blossomNum();  | 
   222   const_mat_test.blossomNum();  | 
   223   const_mat_test.blossomSize(k);  | 
   223   const_mat_test.blossomSize(k);  | 
   423     }  | 
   423     }  | 
   424   | 
   424   | 
   425     { | 
   425     { | 
   426       MaxWeightedPerfectMatching<SmartGraph> mwpm(graph, weight);  | 
   426       MaxWeightedPerfectMatching<SmartGraph> mwpm(graph, weight);  | 
   427       bool result = mwpm.run();  | 
   427       bool result = mwpm.run();  | 
   428         | 
   428   | 
   429       check(result == perfect, "Perfect matching found");  | 
   429       check(result == perfect, "Perfect matching found");  | 
   430       if (perfect) { | 
   430       if (perfect) { | 
   431         checkWeightedPerfectMatching(graph, weight, mwpm);  | 
   431         checkWeightedPerfectMatching(graph, weight, mwpm);  | 
   432       }  | 
   432       }  | 
   433     }  | 
   433     }  | 
   434   | 
   434   | 
   435     { | 
   435     { | 
   436       MaxWeightedPerfectMatching<SmartGraph> mwpm(graph, weight);  | 
   436       MaxWeightedPerfectMatching<SmartGraph> mwpm(graph, weight);  | 
   437       mwpm.init();  | 
   437       mwpm.init();  | 
   438       bool result = mwpm.start();  | 
   438       bool result = mwpm.start();  | 
   439         | 
   439   | 
   440       check(result == perfect, "Perfect matching found");  | 
   440       check(result == perfect, "Perfect matching found");  | 
   441       if (perfect) { | 
   441       if (perfect) { | 
   442         checkWeightedPerfectMatching(graph, weight, mwpm);  | 
   442         checkWeightedPerfectMatching(graph, weight, mwpm);  | 
   443       }  | 
   443       }  | 
   444     }  | 
   444     }  |