/* -*- mode: C++; indent-tabs-mode: nil; -*-
* This file is a part of LEMON, a generic C++ optimization library.
* Copyright (C) 2003-2010
* Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
* (Egervary Research Group on Combinatorial Optimization, EGRES).
* Permission to use, modify and distribute this software is granted
* provided that this copyright notice appears in all copies. For
* precise terms see the accompanying LICENSE file.
* This software is provided "AS IS" with no warranty of any kind,
* express or implied, and with no claim as to its suitability for any
#include <lemon/smart_graph.h>
#include <lemon/max_cardinality_search.h>
#include <lemon/concepts/digraph.h>
#include <lemon/concepts/maps.h>
#include <lemon/concepts/heap.h>
#include <lemon/lgf_reader.h>
void checkMaxCardSearchCompile() {
typedef concepts::Digraph Digraph;
typedef Digraph::Node Node;
typedef Digraph::Arc Arc;
typedef concepts::ReadMap<Arc,Value> CapMap;
typedef concepts::ReadWriteMap<Node,Value> CardMap;
typedef concepts::ReadWriteMap<Node,bool> ProcMap;
typedef Digraph::NodeMap<int> HeapCrossRef;
HeapCrossRef crossref(g);
typedef MaxCardinalitySearch<Digraph,CapMap>
::SetCardinalityMap<CardMap>
::SetProcessedMap<ProcMap>
::SetStandardHeap<BinHeap<Value,HeapCrossRef> >
MaxCardType maxcard(g,cap);
const MaxCardType& const_maxcard = maxcard;
const MaxCardType::Heap& heap_const = const_maxcard.heap();
MaxCardType::Heap& heap = const_cast<MaxCardType::Heap&>(heap_const);
maxcard.heap(heap,crossref);
maxcard.capacityMap(cap).cardinalityMap(card).processedMap(proc);
maxcard.processNextNode();
void checkWithIntMap( std::istringstream& input)
typedef SmartDigraph Digraph;
typedef Digraph::Node Node;
typedef Digraph::ArcMap<int> CapMap;
DigraphReader<Digraph>(g,input).
MaxCardinalitySearch<Digraph,CapMap> maxcard(g,cap);
check(maxcard.processed(s) && !maxcard.processed(x) &&
!maxcard.processed(y), "Wrong processed()!");
check(maxcard.processNextNode()==a,
"Wrong nextNode() or processNextNode() return value!");
check(maxcard.processed(a), "Wrong processNextNode()!");
check(maxcard.cardinality(x)==2 && maxcard.cardinality(y)>=4,
void checkWithConst1Map(std::istringstream &input) {
typedef SmartDigraph Digraph;
typedef Digraph::Node Node;
DigraphReader<Digraph>(g,input).
MaxCardinalitySearch<Digraph> maxcard(g);
check(maxcard.cardinality(x)==1 &&
maxcard.cardinality(y)+maxcard.cardinality(z)==3,
std::istringstream input1(test_lgf);
std::istringstream input2(test_lgf);
checkWithConst1Map(input2);