43 ///\brief Base type for the Graph Adaptors |
43 ///\brief Base type for the Graph Adaptors |
44 ///\ingroup graph_adaptors |
44 ///\ingroup graph_adaptors |
45 /// |
45 /// |
46 ///Base type for the Graph Adaptors |
46 ///Base type for the Graph Adaptors |
47 /// |
47 /// |
48 ///\warning Graph adaptors are in even |
|
49 ///more experimental state than the other |
|
50 ///parts of the lib. Use them at you own risk. |
|
51 /// |
|
52 ///This is the base type for most of LEMON graph adaptors. |
48 ///This is the base type for most of LEMON graph adaptors. |
53 ///This class implements a trivial graph adaptor i.e. it only wraps the |
49 ///This class implements a trivial graph adaptor i.e. it only wraps the |
54 ///functions and types of the graph. The purpose of this class is to |
50 ///functions and types of the graph. The purpose of this class is to |
55 ///make easier implementing graph adaptors. E.g. if an adaptor is |
51 ///make easier implementing graph adaptors. E.g. if an adaptor is |
56 ///considered which differs from the wrapped graph only in some of its |
52 ///considered which differs from the wrapped graph only in some of its |
645 |
637 |
646 }; |
638 }; |
647 |
639 |
648 /// \brief A graph adaptor for hiding nodes and edges from a graph. |
640 /// \brief A graph adaptor for hiding nodes and edges from a graph. |
649 /// \ingroup graph_adaptors |
641 /// \ingroup graph_adaptors |
650 /// |
|
651 /// \warning Graph adaptors are in even more experimental state than the |
|
652 /// other parts of the lib. Use them at you own risk. |
|
653 /// |
642 /// |
654 /// SubGraphAdaptor shows the graph with filtered node-set and |
643 /// SubGraphAdaptor shows the graph with filtered node-set and |
655 /// edge-set. If the \c checked parameter is true then it filters the edgeset |
644 /// edge-set. If the \c checked parameter is true then it filters the edgeset |
656 /// to do not get invalid edges without source or target. |
645 /// to do not get invalid edges without source or target. |
657 /// Let \f$ G=(V, A) \f$ be a directed graph |
646 /// Let \f$ G=(V, A) \f$ be a directed graph |
768 |
757 |
769 |
758 |
770 ///\brief An adaptor for hiding nodes from a graph. |
759 ///\brief An adaptor for hiding nodes from a graph. |
771 ///\ingroup graph_adaptors |
760 ///\ingroup graph_adaptors |
772 /// |
761 /// |
773 ///\warning Graph adaptors are in even more experimental state |
|
774 ///than the other |
|
775 ///parts of the lib. Use them at you own risk. |
|
776 /// |
|
777 ///An adaptor for hiding nodes from a graph. |
762 ///An adaptor for hiding nodes from a graph. |
778 ///This adaptor specializes SubGraphAdaptor in the way that only |
763 ///This adaptor specializes SubGraphAdaptor in the way that only |
779 ///the node-set |
764 ///the node-set |
780 ///can be filtered. In usual case the checked parameter is true, we get the |
765 ///can be filtered. In usual case the checked parameter is true, we get the |
781 ///induced subgraph. But if the checked parameter is false then we can only |
766 ///induced subgraph. But if the checked parameter is false then we can only |
824 nodeSubGraphAdaptor(const Graph& graph, const NodeFilterMap& nfm) { |
809 nodeSubGraphAdaptor(const Graph& graph, const NodeFilterMap& nfm) { |
825 return NodeSubGraphAdaptor<const Graph, const NodeFilterMap>(graph, nfm); |
810 return NodeSubGraphAdaptor<const Graph, const NodeFilterMap>(graph, nfm); |
826 } |
811 } |
827 |
812 |
828 ///\brief An adaptor for hiding edges from a graph. |
813 ///\brief An adaptor for hiding edges from a graph. |
829 /// |
|
830 ///\warning Graph adaptors are in even more experimental state |
|
831 ///than the other parts of the lib. Use them at you own risk. |
|
832 /// |
814 /// |
833 ///An adaptor for hiding edges from a graph. |
815 ///An adaptor for hiding edges from a graph. |
834 ///This adaptor specializes SubGraphAdaptor in the way that |
816 ///This adaptor specializes SubGraphAdaptor in the way that |
835 ///only the edge-set |
817 ///only the edge-set |
836 ///can be filtered. The usefulness of this adaptor is demonstrated in the |
818 ///can be filtered. The usefulness of this adaptor is demonstrated in the |
1477 ///\brief An adaptor for composing the residual |
1459 ///\brief An adaptor for composing the residual |
1478 ///graph for directed flow and circulation problems. |
1460 ///graph for directed flow and circulation problems. |
1479 /// |
1461 /// |
1480 ///\ingroup graph_adaptors |
1462 ///\ingroup graph_adaptors |
1481 /// |
1463 /// |
1482 ///An adaptor for composing the residual graph for |
1464 ///An adaptor for composing the residual graph for directed flow and |
1483 ///directed flow and circulation problems. |
1465 ///circulation problems. Let \f$ G=(V, A) \f$ be a directed graph |
1484 // ///Let \f$ G=(V, A) \f$ be a directed graph and let \f$ F \f$ be a |
1466 ///and let \f$ F \f$ be a number type. Let moreover \f$ f,c:A\to F \f$, |
1485 // ///number type. Let moreover |
1467 ///be functions on the edge-set. |
1486 // ///\f$ f,c:A\to F \f$, be functions on the edge-set. |
1468 /// |
1487 // ///In the appications of ResGraphAdaptor, \f$ f \f$ usually stands for a |
1469 ///In the appications of ResGraphAdaptor, \f$ f \f$ usually stands |
1488 // ///flow and \f$ c \f$ for a capacity function. |
1470 ///for a flow and \f$ c \f$ for a capacity function. Suppose that a |
1489 // ///Suppose that a graph instange \c g of type |
1471 ///graph instange \c g of type \c ListGraph implements \f$ G \f$. |
1490 // ///\c ListGraph implements \f$ G \f$. |
1472 /// |
1491 // ///\code |
1473 ///\code |
1492 // /// ListGraph g; |
1474 /// ListGraph g; |
1493 // ///\endcode |
1475 ///\endcode |
1494 // ///Then RevGraphAdaptor implements the graph structure with node-set |
1476 /// |
1495 // ///\f$ V \f$ and edge-set \f$ A_{forward}\cup A_{backward} \f$, where |
1477 ///Then RevGraphAdaptor implements the graph structure with node-set |
1496 // ///\f$ A_{forward}=\{uv : uv\in A, f(uv)<c(uv)\} \f$ and |
1478 /// \f$ V \f$ and edge-set \f$ A_{forward}\cup A_{backward} \f$, |
1497 // ///\f$ A_{backward}=\{vu : uv\in A, f(uv)>0\} \f$, |
1479 ///where \f$ A_{forward}=\{uv : uv\in A, f(uv)<c(uv)\} \f$ and |
1498 // ///i.e. the so called residual graph. |
1480 /// \f$ A_{backward}=\{vu : uv\in A, f(uv)>0\} \f$, i.e. the so called |
1499 // ///When we take the union \f$ A_{forward}\cup A_{backward} \f$, |
1481 ///residual graph. When we take the union |
1500 // ///multilicities are counted, i.e. if an edge is in both |
1482 /// \f$ A_{forward}\cup A_{backward} \f$, multilicities are counted, i.e. |
1501 // ///\f$ A_{forward} \f$ and \f$ A_{backward} \f$, then in the adaptor it |
1483 ///if an edge is in both \f$ A_{forward} \f$ and \f$ A_{backward} \f$, |
1502 // ///appears twice. The following code shows how such an instance can be |
1484 ///then in the adaptor it appears twice. The following code shows how |
1503 // ///constructed. |
1485 ///such an instance can be constructed. |
1504 // ///\code |
1486 /// |
1505 // /// typedef ListGraph Graph; |
1487 ///\code |
1506 // /// Graph::EdgeMap<int> f(g); |
1488 /// typedef ListGraph Graph; |
1507 // /// Graph::EdgeMap<int> c(g); |
1489 /// Graph::EdgeMap<int> f(g); |
1508 // /// ResGraphAdaptor<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > ga(g); |
1490 /// Graph::EdgeMap<int> c(g); |
1509 // ///\endcode |
1491 /// ResGraphAdaptor<Graph, int, Graph::EdgeMap<int>, Graph::EdgeMap<int> > ga(g); |
1510 // ///\author Marton Makai |
1492 ///\endcode |
1511 // /// |
1493 ///\author Marton Makai |
|
1494 /// |
1512 template<typename Graph, typename Number, |
1495 template<typename Graph, typename Number, |
1513 typename CapacityMap, typename FlowMap, |
1496 typename CapacityMap, typename FlowMap, |
1514 typename Tolerance = Tolerance<Number> > |
1497 typename Tolerance = Tolerance<Number> > |
1515 class ResGraphAdaptor : |
1498 class ResGraphAdaptor : |
1516 public EdgeSubGraphAdaptor< |
1499 public EdgeSubGraphAdaptor< |
1683 |
1666 |
1684 |
1667 |
1685 ///\brief For blocking flows. |
1668 ///\brief For blocking flows. |
1686 ///\ingroup graph_adaptors |
1669 ///\ingroup graph_adaptors |
1687 /// |
1670 /// |
1688 ///\warning Graph adaptors are in even more |
|
1689 ///experimental state than the other |
|
1690 ///parts of the lib. Use them at you own risk. |
|
1691 /// |
|
1692 ///This graph adaptor is used for on-the-fly |
1671 ///This graph adaptor is used for on-the-fly |
1693 ///Dinits blocking flow computations. |
1672 ///Dinits blocking flow computations. |
1694 ///For each node, an out-edge is stored which is used when the |
1673 ///For each node, an out-edge is stored which is used when the |
1695 ///\code |
1674 ///\code |
1696 ///OutEdgeIt& first(OutEdgeIt&, const Node&) |
1675 ///OutEdgeIt& first(OutEdgeIt&, const Node&) |