lemon/graph_adaptor.h
changeset 1952 6150d1cf0825
parent 1951 cb7a6e0573bc
child 1956 a055123339d5
equal deleted inserted replaced
20:216ee418555f 21:04b666edafa4
   437   /// other parts of the lib. Use them at you own risk.
   437   /// other parts of the lib. Use them at you own risk.
   438   /// 
   438   /// 
   439   /// SubGraphAdaptor shows the graph with filtered node-set and 
   439   /// SubGraphAdaptor shows the graph with filtered node-set and 
   440   /// edge-set. If the \c checked parameter is true then it filters the edgeset
   440   /// edge-set. If the \c checked parameter is true then it filters the edgeset
   441   /// to do not get invalid edges without source or target.
   441   /// to do not get invalid edges without source or target.
   442   /// Let  \f$  G=(V, A)  \f$  be a directed graph
   442   /// Let \f$ G=(V, A) \f$ be a directed graph
   443   /// and suppose that the graph instance \c g of type ListGraph
   443   /// and suppose that the graph instance \c g of type ListGraph
   444   /// implements  \f$  G  \f$ .
   444   /// implements \f$ G \f$.
   445   /// Let moreover  \f$  b_V  \f$  and  \f$  b_A  \f$  be bool-valued functions resp.
   445   /// Let moreover \f$ b_V \f$ and \f$ b_A \f$ be bool-valued functions resp.
   446   /// on the node-set and edge-set.
   446   /// on the node-set and edge-set.
   447   /// SubGraphAdaptor<...>::NodeIt iterates 
   447   /// SubGraphAdaptor<...>::NodeIt iterates 
   448   /// on the node-set  \f$ \{v\in V : b_V(v)=true\} \f$  and 
   448   /// on the node-set \f$ \{v\in V : b_V(v)=true\} \f$ and 
   449   /// SubGraphAdaptor<...>::EdgeIt iterates 
   449   /// SubGraphAdaptor<...>::EdgeIt iterates 
   450   /// on the edge-set  \f$ \{e\in A : b_A(e)=true\} \f$ . Similarly, 
   450   /// on the edge-set \f$ \{e\in A : b_A(e)=true\} \f$. Similarly, 
   451   /// SubGraphAdaptor<...>::OutEdgeIt and
   451   /// SubGraphAdaptor<...>::OutEdgeIt and
   452   /// SubGraphAdaptor<...>::InEdgeIt iterates 
   452   /// SubGraphAdaptor<...>::InEdgeIt iterates 
   453   /// only on edges leaving and entering a specific node which have true value.
   453   /// only on edges leaving and entering a specific node which have true value.
   454   /// 
   454   /// 
   455   /// If the \c checked template parameter is false then we have to note that 
   455   /// If the \c checked template parameter is false then we have to note that 
  1047   ///
  1047   ///
  1048   ///\warning Graph adaptors are in even more experimental state
  1048   ///\warning Graph adaptors are in even more experimental state
  1049   ///than the other
  1049   ///than the other
  1050   ///parts of the lib. Use them at you own risk.
  1050   ///parts of the lib. Use them at you own risk.
  1051   ///
  1051   ///
  1052   /// Let  \f$  G=(V, A)  \f$  be a directed graph and for each directed edge 
  1052   /// Let \f$ G=(V, A) \f$ be a directed graph and for each directed edge 
  1053   ///  \f$  e\in A  \f$ , let  \f$  \bar e  \f$  denote the edge obtained by
  1053   ///\f$ e\in A \f$, let \f$ \bar e \f$ denote the edge obtained by
  1054   /// reversing its orientation. We are given moreover two bool valued 
  1054   /// reversing its orientation. We are given moreover two bool valued 
  1055   /// maps on the edge-set, 
  1055   /// maps on the edge-set, 
  1056   ///  \f$  forward\_filter  \f$ , and  \f$  backward\_filter  \f$ . 
  1056   ///\f$ forward\_filter \f$, and \f$ backward\_filter \f$. 
  1057   /// SubBidirGraphAdaptor implements the graph structure with node-set 
  1057   /// SubBidirGraphAdaptor implements the graph structure with node-set 
  1058   ///  \f$  V  \f$  and edge-set 
  1058   ///\f$ V \f$ and edge-set 
  1059   ///  \f$  \{e : e\in A \mbox{ and } forward\_filter(e) \mbox{ is true}\}+\{\bar e : e\in A \mbox{ and } backward\_filter(e) \mbox{ is true}\}  \f$ . 
  1059   ///\f$ \{e : e\in A \mbox{ and } forward\_filter(e) \mbox{ is true}\}+\{\bar e : e\in A \mbox{ and } backward\_filter(e) \mbox{ is true}\} \f$. 
  1060   /// The purpose of writing + instead of union is because parallel 
  1060   /// The purpose of writing + instead of union is because parallel 
  1061   /// edges can arise. (Similarly, antiparallel edges also can arise).
  1061   /// edges can arise. (Similarly, antiparallel edges also can arise).
  1062   /// In other words, a subgraph of the bidirected graph obtained, which 
  1062   /// In other words, a subgraph of the bidirected graph obtained, which 
  1063   /// is given by orienting the edges of the original graph in both directions.
  1063   /// is given by orienting the edges of the original graph in both directions.
  1064   /// As the oppositely directed edges are logically different, 
  1064   /// As the oppositely directed edges are logically different, 
  1183   ///graph for directed flow and circulation problems.
  1183   ///graph for directed flow and circulation problems.
  1184   ///\ingroup graph_adaptors
  1184   ///\ingroup graph_adaptors
  1185   ///
  1185   ///
  1186   ///An adaptor for composing the residual graph for
  1186   ///An adaptor for composing the residual graph for
  1187   ///directed flow and circulation problems. 
  1187   ///directed flow and circulation problems. 
  1188   ///Let  \f$ G=(V, A) \f$  be a directed graph and let  \f$ F \f$  be a 
  1188   ///Let \f$ G=(V, A) \f$ be a directed graph and let \f$ F \f$ be a 
  1189   ///number type. Let moreover 
  1189   ///number type. Let moreover 
  1190   /// \f$ f,c:A\to F \f$ , be functions on the edge-set. 
  1190   ///\f$ f,c:A\to F \f$, be functions on the edge-set. 
  1191   ///In the appications of ResGraphAdaptor,  \f$ f \f$  usually stands for a flow 
  1191   ///In the appications of ResGraphAdaptor, \f$ f \f$ usually stands for a flow 
  1192   ///and  \f$ c \f$  for a capacity function.   
  1192   ///and \f$ c \f$ for a capacity function.   
  1193   ///Suppose that a graph instange \c g of type 
  1193   ///Suppose that a graph instange \c g of type 
  1194   ///\c ListGraph implements  \f$ G \f$  .
  1194   ///\c ListGraph implements \f$ G \f$.
  1195   ///\code
  1195   ///\code
  1196   ///  ListGraph g;
  1196   ///  ListGraph g;
  1197   ///\endcode
  1197   ///\endcode
  1198   ///Then RevGraphAdaptor implements the graph structure with node-set 
  1198   ///Then RevGraphAdaptor implements the graph structure with node-set 
  1199   /// \f$ V \f$  and edge-set  \f$ A_{forward}\cup A_{backward} \f$ , where 
  1199   ///\f$ V \f$ and edge-set \f$ A_{forward}\cup A_{backward} \f$, where 
  1200   /// \f$ A_{forward}=\{uv : uv\in A, f(uv)<c(uv)\} \f$  and 
  1200   ///\f$ A_{forward}=\{uv : uv\in A, f(uv)<c(uv)\} \f$ and 
  1201   /// \f$ A_{backward}=\{vu : uv\in A, f(uv)>0\} \f$ , 
  1201   ///\f$ A_{backward}=\{vu : uv\in A, f(uv)>0\} \f$, 
  1202   ///i.e. the so called residual graph. 
  1202   ///i.e. the so called residual graph. 
  1203   ///When we take the union  \f$ A_{forward}\cup A_{backward} \f$ , 
  1203   ///When we take the union \f$ A_{forward}\cup A_{backward} \f$, 
  1204   ///multilicities are counted, i.e. if an edge is in both 
  1204   ///multilicities are counted, i.e. if an edge is in both 
  1205   /// \f$ A_{forward} \f$  and  \f$ A_{backward} \f$ , then in the adaptor it 
  1205   ///\f$ A_{forward} \f$ and \f$ A_{backward} \f$, then in the adaptor it 
  1206   ///appears twice. 
  1206   ///appears twice. 
  1207   ///The following code shows how 
  1207   ///The following code shows how 
  1208   ///such an instance can be constructed.
  1208   ///such an instance can be constructed.
  1209   ///\code
  1209   ///\code
  1210   ///typedef ListGraph Graph;
  1210   ///typedef ListGraph Graph;