[Lemon-commits] Alpar Juttner: Merge bugfix #439 to branch 1.2
Lemon HG
hg at lemon.cs.elte.hu
Fri Aug 9 14:28:21 CEST 2013
details: http://lemon.cs.elte.hu/hg/lemon/rev/19087d4f215d
changeset: 1268:19087d4f215d
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Fri Aug 09 14:05:29 2013 +0200
description:
Merge bugfix #439 to branch 1.2
diffstat:
lemon/connectivity.h | 27 +++++++++++++++++++++++++--
test/connectivity_test.cc | 17 +++++++++++++++++
2 files changed, 42 insertions(+), 2 deletions(-)
diffs (70 lines):
diff --git a/lemon/connectivity.h b/lemon/connectivity.h
--- a/lemon/connectivity.h
+++ b/lemon/connectivity.h
@@ -745,14 +745,37 @@
/// \brief Check whether an undirected graph is bi-node-connected.
///
/// This function checks whether the given undirected graph is
- /// bi-node-connected, i.e. any two edges are on same circle.
+ /// bi-node-connected, i.e. a connected graph without articulation
+ /// node.
///
/// \return \c true if the graph bi-node-connected.
- /// \note By definition, the empty graph is bi-node-connected.
+ ///
+ /// \note By definition,
+ /// \li a graph consisting of zero or one node is bi-node-connected,
+ /// \li a graph consisting of two isolated nodes
+ /// is \e not bi-node-connected and
+ /// \li a graph consisting of two nodes connected by an edge
+ /// is bi-node-connected.
///
/// \see countBiNodeConnectedComponents(), biNodeConnectedComponents()
template <typename Graph>
bool biNodeConnected(const Graph& graph) {
+ bool hasNonIsolated = false, hasIsolated = false;
+ for (typename Graph::NodeIt n(graph); n != INVALID; ++n) {
+ if (typename Graph::OutArcIt(graph, n) == INVALID) {
+ if (hasIsolated || hasNonIsolated) {
+ return false;
+ } else {
+ hasIsolated = true;
+ }
+ } else {
+ if (hasIsolated) {
+ return false;
+ } else {
+ hasNonIsolated = true;
+ }
+ }
+ }
return countBiNodeConnectedComponents(graph) <= 1;
}
diff --git a/test/connectivity_test.cc b/test/connectivity_test.cc
--- a/test/connectivity_test.cc
+++ b/test/connectivity_test.cc
@@ -99,6 +99,23 @@
}
{
+ ListGraph g;
+ ListGraph::NodeMap<bool> map(g);
+
+ ListGraph::Node n1 = g.addNode();
+ ListGraph::Node n2 = g.addNode();
+
+ ListGraph::Edge e1 = g.addEdge(n1, n2);
+ ::lemon::ignore_unused_variable_warning(e1);
+ check(biNodeConnected(g), "Graph is bi-node-connected");
+
+ ListGraph::Node n3 = g.addNode();
+ ::lemon::ignore_unused_variable_warning(n3);
+ check(!biNodeConnected(g), "Graph is not bi-node-connected");
+ }
+
+
+ {
Digraph d;
Digraph::NodeMap<int> order(d);
Graph g(d);
More information about the Lemon-commits
mailing list