#include #include #include #include #include #include #include #include #include using std::cout; using std::endl; using namespace lemon; using namespace lemon::concept; class Graph3 : ListGraph { public: class Node : public ListGraph::Node { }; class Edge { }; }; template void printGraph(const Graph& g) { cout << " nodes:" << endl; for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { cout << " " << g.id(n) << endl; } cout << " edges:" << endl; for (typename Graph::EdgeIt n(g); n!=INVALID; ++n) { cout << " " << g.id(n) << ": " << g.id(g.source(n)) << "->" << g.id(g.target(n)) << endl; } } int main() { { cout << "FIRST TEST" << endl; typedef SmartGraph Graph1; typedef ListGraph Graph2; { checkConcept >(); MergeEdgeGraphWrapper::printNode(); MergeEdgeGraphWrapper::printEdge(); checkConcept >(); MergeEdgeGraphWrapper::printNode(); MergeEdgeGraphWrapper::printEdge(); typedef ResGraphWrapper, ConstMap > Graph4; checkConcept >(); MergeEdgeGraphWrapper::printNode(); MergeEdgeGraphWrapper::printEdge(); checkConcept >(); MergeEdgeGraphWrapper::printNode(); MergeEdgeGraphWrapper::printEdge(); } Graph1 g1; Graph2 g2; typedef MergeEdgeGraphWrapper GW; GW gw(g1, g2); std::ifstream f1("graph1.dim"); std::ifstream f2("graph2.dim"); readDimacs(f1, g1); readDimacs(f2, g2); cout << "1st graph" << endl; printGraph(g1); cout << "2nd graph" << endl; printGraph(g2); cout << "merged graph" << endl; printGraph(gw); } { cout << "SECOND TEST" << endl; typedef SmartGraph Graph1; { checkConcept(); } Graph1 g1; FullGraph pre_g2(2); ConstMap const_false_map(false); typedef EdgeSubGraphWrapper > Graph2; { checkConcept(); } Graph2 g2(pre_g2, const_false_map); typedef MergeEdgeGraphWrapper GW; { checkConcept(); } GW gw(g1, g2); GW::Node sw; GW::Node tw; { Graph2::NodeIt k(g2); sw=GW::Node(INVALID, k, true); ++k; tw=GW::Node(INVALID, k, true); } std::ifstream f1("graph2.dim"); readDimacs(f1, g1); cout << "1st graph" << endl; printGraph(g1); cout << "2nd graph" << endl; printGraph(g2); cout << "merged graph" << endl; printGraph(gw); typedef ListGraph Graph3; //typedef SmartGraph Graph3; Graph3 g3; GW::NodeMap gwn(gw); Graph3::NodeMap g3n(g3); for (GW::NodeIt n(gw); n!=INVALID; ++n) { Graph3::Node m=g3.addNode(); gwn.set(n, m); g3n.set(m, n); } typedef NewEdgeSetGraphWrapper GWW; { checkConcept(); } GWW gww(gw, g3, gwn, g3n); for (Graph1::NodeIt n(g1); n!=INVALID; ++n) { g3.addEdge(gwn[sw], gwn[GW::Node(n,INVALID,false)]); } // for (Graph1::NodeIt n(g1); n!=INVALID; ++n) { // gww.addEdge(sw, GW::Node(n,INVALID,false)); // } cout << "new edges" << endl; printGraph(g3); cout << "new edges in the new graph" << endl; printGraph(gww); typedef AugmentingGraphWrapper GWWW; { checkConcept(); } GWWW gwww(gw, gww); cout << "new edges merged into the original graph" << endl; printGraph(gwww); } }