[Lemon-commits] Balazs Dezso: Renamings in connectivity.h and bu...
Lemon HG
hg at lemon.cs.elte.hu
Wed Dec 3 18:49:27 CET 2008
details: http://lemon.cs.elte.hu/hg/lemon/rev/9afe81e4c543
changeset: 435:9afe81e4c543
user: Balazs Dezso <deba [at] inf.elte.hu>
date: Wed Dec 03 14:23:22 2008 +0100
description:
Renamings in connectivity.h and bug fix in DfsVisit (#61)
- The include guard, the private namespace and some local varibles
are renamed
- The stop() must be called in DfsVisit, if there are not outgoing
arcs from the added node
diffstat:
2 files changed, 65 insertions(+), 61 deletions(-)
lemon/connectivity.h | 125 +++++++++++++++++++++++++-------------------------
lemon/dfs.h | 1
diffs (truncated from 380 to 300 lines):
diff -r ad483acf1654 -r 9afe81e4c543 lemon/connectivity.h
--- a/lemon/connectivity.h Tue Dec 02 15:33:22 2008 +0000
+++ b/lemon/connectivity.h Wed Dec 03 14:23:22 2008 +0100
@@ -16,8 +16,8 @@
*
*/
-#ifndef LEMON_TOPOLOGY_H
-#define LEMON_TOPOLOGY_H
+#ifndef LEMON_CONNECTIVITY_H
+#define LEMON_CONNECTIVITY_H
#include <lemon/dfs.h>
#include <lemon/bfs.h>
@@ -154,7 +154,7 @@
return compNum;
}
- namespace _topology_bits {
+ namespace _connectivity_bits {
template <typename Digraph, typename Iterator >
struct LeaveOrderVisitor : public DfsVisitor<Digraph> {
@@ -188,19 +188,19 @@
};
template <typename Digraph, typename ArcMap>
- struct StronglyConnectedCutEdgesVisitor : public DfsVisitor<Digraph> {
+ struct StronglyConnectedCutArcsVisitor : public DfsVisitor<Digraph> {
public:
typedef typename Digraph::Node Node;
typedef typename Digraph::Arc Arc;
- StronglyConnectedCutEdgesVisitor(const Digraph& digraph,
- ArcMap& cutMap,
- int& cutNum)
+ StronglyConnectedCutArcsVisitor(const Digraph& digraph,
+ ArcMap& cutMap,
+ int& cutNum)
: _digraph(digraph), _cutMap(cutMap), _cutNum(cutNum),
- _compMap(digraph), _num(0) {
+ _compMap(digraph, -1), _num(-1) {
}
- void stop(const Node&) {
+ void start(const Node&) {
++_num;
}
@@ -248,7 +248,7 @@
typename Digraph::Node source = NodeIt(digraph);
if (source == INVALID) return true;
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef DfsVisitor<Digraph> Visitor;
Visitor visitor;
@@ -265,6 +265,7 @@
}
typedef ReverseDigraph<const Digraph> RDigraph;
+ typedef typename RDigraph::NodeIt RNodeIt;
RDigraph rdigraph(digraph);
typedef DfsVisitor<Digraph> RVisitor;
@@ -275,7 +276,7 @@
rdfs.addSource(source);
rdfs.start();
- for (NodeIt it(rdigraph); it != INVALID; ++it) {
+ for (RNodeIt it(rdigraph); it != INVALID; ++it) {
if (!rdfs.reached(it)) {
return false;
}
@@ -302,7 +303,7 @@
int countStronglyConnectedComponents(const Digraph& digraph) {
checkConcept<concepts::Digraph, Digraph>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef typename Digraph::Node Node;
typedef typename Digraph::Arc Arc;
@@ -374,7 +375,7 @@
typedef typename Digraph::NodeIt NodeIt;
checkConcept<concepts::WriteMap<Node, int>, NodeMap>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef std::vector<Node> Container;
typedef typename Container::iterator Iterator;
@@ -438,7 +439,7 @@
typedef typename Digraph::NodeIt NodeIt;
checkConcept<concepts::WriteMap<Arc, bool>, ArcMap>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef std::vector<Node> Container;
typedef typename Container::iterator Iterator;
@@ -463,7 +464,7 @@
int cutNum = 0;
- typedef StronglyConnectedCutEdgesVisitor<RDigraph, ArcMap> RVisitor;
+ typedef StronglyConnectedCutArcsVisitor<RDigraph, ArcMap> RVisitor;
RVisitor rvisitor(rgraph, cutMap, cutNum);
DfsVisit<RDigraph, RVisitor> rdfs(rgraph, rvisitor);
@@ -478,7 +479,7 @@
return cutNum;
}
- namespace _topology_bits {
+ namespace _connectivity_bits {
template <typename Digraph>
class CountBiNodeConnectedComponentsVisitor : public DfsVisitor<Digraph> {
@@ -730,7 +731,7 @@
checkConcept<concepts::Graph, Graph>();
typedef typename Graph::NodeIt NodeIt;
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef CountBiNodeConnectedComponentsVisitor<Graph> Visitor;
@@ -773,7 +774,7 @@
typedef typename Graph::Edge Edge;
checkConcept<concepts::WriteMap<Edge, int>, EdgeMap>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef BiNodeConnectedComponentsVisitor<Graph, EdgeMap> Visitor;
@@ -813,7 +814,7 @@
typedef typename Graph::NodeIt NodeIt;
checkConcept<concepts::WriteMap<Node, bool>, NodeMap>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef BiNodeConnectedCutNodesVisitor<Graph, NodeMap> Visitor;
@@ -832,7 +833,7 @@
return cutNum;
}
- namespace _topology_bits {
+ namespace _connectivity_bits {
template <typename Digraph>
class CountBiEdgeConnectedComponentsVisitor : public DfsVisitor<Digraph> {
@@ -1053,7 +1054,7 @@
checkConcept<concepts::Graph, Graph>();
typedef typename Graph::NodeIt NodeIt;
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef CountBiEdgeConnectedComponentsVisitor<Graph> Visitor;
@@ -1095,7 +1096,7 @@
typedef typename Graph::Node Node;
checkConcept<concepts::WriteMap<Node, int>, NodeMap>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef BiEdgeConnectedComponentsVisitor<Graph, NodeMap> Visitor;
@@ -1136,7 +1137,7 @@
typedef typename Graph::Edge Edge;
checkConcept<concepts::WriteMap<Edge, bool>, EdgeMap>();
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
typedef BiEdgeConnectedCutEdgesVisitor<Graph, EdgeMap> Visitor;
@@ -1156,7 +1157,7 @@
}
- namespace _topology_bits {
+ namespace _connectivity_bits {
template <typename Digraph, typename IntNodeMap>
class TopologicalSortVisitor : public DfsVisitor<Digraph> {
@@ -1193,7 +1194,7 @@
/// \see dag
template <typename Digraph, typename NodeMap>
void topologicalSort(const Digraph& graph, NodeMap& order) {
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
checkConcept<concepts::Digraph, Digraph>();
checkConcept<concepts::WriteMap<typename Digraph::Node, int>, NodeMap>();
@@ -1234,8 +1235,8 @@
/// \see topologicalSort
/// \see dag
template <typename Digraph, typename NodeMap>
- bool checkedTopologicalSort(const Digraph& graph, NodeMap& order) {
- using namespace _topology_bits;
+ bool checkedTopologicalSort(const Digraph& digraph, NodeMap& order) {
+ using namespace _connectivity_bits;
checkConcept<concepts::Digraph, Digraph>();
checkConcept<concepts::ReadWriteMap<typename Digraph::Node, int>,
@@ -1245,21 +1246,23 @@
typedef typename Digraph::NodeIt NodeIt;
typedef typename Digraph::Arc Arc;
- order = constMap<Node, int, -1>();
+ for (NodeIt it(digraph); it != INVALID; ++it) {
+ order.set(it, -1);
+ }
TopologicalSortVisitor<Digraph, NodeMap>
- visitor(order, countNodes(graph));
+ visitor(order, countNodes(digraph));
DfsVisit<Digraph, TopologicalSortVisitor<Digraph, NodeMap> >
- dfs(graph, visitor);
+ dfs(digraph, visitor);
dfs.init();
- for (NodeIt it(graph); it != INVALID; ++it) {
+ for (NodeIt it(digraph); it != INVALID; ++it) {
if (!dfs.reached(it)) {
dfs.addSource(it);
while (!dfs.emptyQueue()) {
- Arc edge = dfs.nextArc();
- Node target = graph.target(edge);
+ Arc arc = dfs.nextArc();
+ Node target = digraph.target(arc);
if (dfs.reached(target) && order[target] == -1) {
return false;
}
@@ -1279,7 +1282,7 @@
/// \return %False when the graph is not DAG.
/// \see acyclic
template <typename Digraph>
- bool dag(const Digraph& graph) {
+ bool dag(const Digraph& digraph) {
checkConcept<concepts::Digraph, Digraph>();
@@ -1290,18 +1293,18 @@
typedef typename Digraph::template NodeMap<bool> ProcessedMap;
typename Dfs<Digraph>::template SetProcessedMap<ProcessedMap>::
- Create dfs(graph);
+ Create dfs(digraph);
- ProcessedMap processed(graph);
+ ProcessedMap processed(digraph);
dfs.processedMap(processed);
dfs.init();
- for (NodeIt it(graph); it != INVALID; ++it) {
+ for (NodeIt it(digraph); it != INVALID; ++it) {
if (!dfs.reached(it)) {
dfs.addSource(it);
while (!dfs.emptyQueue()) {
Arc edge = dfs.nextArc();
- Node target = graph.target(edge);
+ Node target = digraph.target(edge);
if (dfs.reached(target) && !processed[target]) {
return false;
}
@@ -1380,7 +1383,7 @@
return true;
}
- namespace _topology_bits {
+ namespace _connectivity_bits {
template <typename Digraph>
class BipartiteVisitor : public BfsVisitor<Digraph> {
@@ -1449,7 +1452,7 @@
/// \sa bipartitePartitions
template<typename Graph>
inline bool bipartite(const Graph &graph){
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
checkConcept<concepts::Graph, Graph>();
@@ -1489,7 +1492,7 @@
/// \return %True if \c graph is bipartite, %false otherwise.
template<typename Graph, typename NodeMap>
inline bool bipartitePartitions(const Graph &graph, NodeMap &partMap){
- using namespace _topology_bits;
+ using namespace _connectivity_bits;
checkConcept<concepts::Graph, Graph>();
More information about the Lemon-commits
mailing list