/* -*- C++ -*- * * This file is a part of LEMON, a generic C++ optimization library * * Copyright (C) 2003-2006 * 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 * purpose. * */ #include #include #include #include #include #include #include #include /// \ingroup demos /// \file /// \brief Demo what shows the result of some topology functions. /// /// Demo what shows the result of some topology functions. /// /// \include topology_demo.cc using namespace lemon; using namespace lemon::dim2; using namespace std; Color color(bool val) { return val ? RED : BLUE; } void drawConnectedComponents() { typedef ListUGraph Graph; typedef Graph::Node Node; Graph graph; Graph::NodeMap > coords(graph); UGraphReader("u_components.lgf", graph). readNodeMap("coordinates_x", xMap(coords)). readNodeMap("coordinates_y", yMap(coords)). run(); Palette palette; Graph::NodeMap compMap(graph); connectedComponents(graph, compMap); graphToEps(graph, "connected_components.eps").undirected(). coords(coords).scaleToA4().enableParallel(). nodeColors(composeMap(palette, compMap)).run(); std::cout << "Result: connected_components.eps" << std::endl; } void drawStronglyConnectedComponents() { typedef ListGraph Graph; typedef Graph::Node Node; Graph graph; Graph::NodeMap > coords(graph); GraphReader("dir_components.lgf", graph). readNodeMap("coordinates_x", xMap(coords)). readNodeMap("coordinates_y", yMap(coords)). run(); Palette palette; Graph::NodeMap compMap(graph); Graph::EdgeMap cutMap(graph); stronglyConnectedComponents(graph, compMap); stronglyConnectedCutEdges(graph, cutMap); graphToEps(graph, "strongly_connected_components.eps"). coords(coords).scaleToA4().enableParallel().drawArrows(). nodeColors(composeMap(palette, compMap)). edgeColors(composeMap(functorMap(&color), cutMap)).run(); std::cout << "Result: strongly_connected_components.eps" << std::endl; } void drawNodeBiconnectedComponents() { typedef ListUGraph Graph; typedef Graph::Node Node; typedef Graph::UEdge UEdge; Graph graph; Graph::NodeMap > coords(graph); UGraphReader("u_components.lgf", graph). readNodeMap("coordinates_x", xMap(coords)). readNodeMap("coordinates_y", yMap(coords)). run(); Palette palette; Graph::UEdgeMap compMap(graph); Graph::NodeMap cutMap(graph); biNodeConnectedComponents(graph, compMap); biNodeConnectedCutNodes(graph, cutMap); graphToEps(graph, "bi_node_connected_components.eps").undirected(). coords(coords).scaleToA4().enableParallel(). edgeColors(composeMap(palette, compMap)). nodeColors(composeMap(functorMap(&color), cutMap)). run(); std::cout << "Result: bi_node_connected_components.eps" << std::endl; } void drawEdgeBiconnectedComponents() { typedef ListUGraph Graph; typedef Graph::Node Node; typedef Graph::UEdge UEdge; Graph graph; Graph::NodeMap > coords(graph); UGraphReader("u_components.lgf", graph). readNodeMap("coordinates_x", xMap(coords)). readNodeMap("coordinates_y", yMap(coords)). run(); Palette palette; Graph::NodeMap compMap(graph); Graph::UEdgeMap cutMap(graph); biEdgeConnectedComponents(graph, compMap); biEdgeConnectedCutEdges(graph, cutMap); graphToEps(graph, "bi_edge_connected_components.eps").undirected(). coords(coords).scaleToA4().enableParallel(). nodeColors(composeMap(palette, compMap)). edgeColors(composeMap(functorMap(&color), cutMap)).run(); std::cout << "Result: bi_edge_connected_components.eps" << std::endl; } void drawBipartitePartitions() { typedef ListUGraph Graph; typedef Graph::Node Node; typedef Graph::UEdge UEdge; Graph graph; Graph::NodeMap > coords(graph); UGraphReader("partitions.lgf", graph). readNodeMap("coordinates_x", xMap(coords)). readNodeMap("coordinates_y", yMap(coords)). run(); Palette palette; Graph::NodeMap partMap(graph); bipartitePartitions(graph, partMap); graphToEps(graph, "bipartite_partitions.eps").undirected(). coords(coords).scaleToA4().enableParallel(). nodeColors(composeMap(functorMap(&color), partMap)).run(); std::cout << "Result: bipartite_partitions.eps" << std::endl; } int main() { drawConnectedComponents(); drawStronglyConnectedComponents(); drawNodeBiconnectedComponents(); drawEdgeBiconnectedComponents(); drawBipartitePartitions(); return 0; }