# HG changeset patch
# User Balazs Dezso <deba@google.com>
# Date 1375995370 -7200
# Node ID 792b426a35f09fd812e47cad01461e3f7aea6e1e
# Parent 4000b7ef4e0104ecb1801bf6cf116ca5dc32c056
Fix biNodeConnected() function
diff -r 4000b7ef4e01 -r 792b426a35f0 lemon/connectivity.h
a
|
b
|
|
745 | 745 | /// \brief Check whether an undirected graph is bi-node-connected. |
746 | 746 | /// |
747 | 747 | /// This function checks whether the given undirected graph is |
748 | | /// bi-node-connected, i.e. any two edges are on same circle. |
| 748 | /// bi-node-connected, i.e. a connected graph without articulation |
| 749 | /// node. |
749 | 750 | /// |
750 | 751 | /// \return \c true if the graph bi-node-connected. |
751 | 752 | /// \note By definition, the empty graph is bi-node-connected. |
… |
… |
|
753 | 754 | /// \see countBiNodeConnectedComponents(), biNodeConnectedComponents() |
754 | 755 | template <typename Graph> |
755 | 756 | bool biNodeConnected(const Graph& graph) { |
| 757 | bool hasNonIsolated = false, hasIsolated = false; |
| 758 | for (typename Graph::NodeIt n(graph); n != INVALID; ++n) { |
| 759 | if (typename Graph::OutArcIt(graph, n) == INVALID) { |
| 760 | if (hasIsolated || hasNonIsolated) { |
| 761 | return false; |
| 762 | } else { |
| 763 | hasIsolated = true; |
| 764 | } |
| 765 | } else { |
| 766 | if (hasIsolated) { |
| 767 | return false; |
| 768 | } else { |
| 769 | hasNonIsolated = true; |
| 770 | } |
| 771 | } |
| 772 | } |
756 | 773 | return countBiNodeConnectedComponents(graph) <= 1; |
757 | 774 | } |
758 | 775 | |
diff -r 4000b7ef4e01 -r 792b426a35f0 test/connectivity_test.cc
a
|
b
|
|
99 | 99 | } |
100 | 100 | |
101 | 101 | { |
| 102 | ListGraph g; |
| 103 | ListGraph::NodeMap<bool> map(g); |
| 104 | |
| 105 | ListGraph::Node n1 = g.addNode(); |
| 106 | ListGraph::Node n2 = g.addNode(); |
| 107 | |
| 108 | ListGraph::Edge e1 = g.addEdge(n1, n2); |
| 109 | ::lemon::ignore_unused_variable_warning(e1); |
| 110 | check(biNodeConnected(g), "Graph is bi-node-connected"); |
| 111 | |
| 112 | ListGraph::Node n3 = g.addNode(); |
| 113 | ::lemon::ignore_unused_variable_warning(n3); |
| 114 | check(!biNodeConnected(g), "Graph is not bi-node-connected"); |
| 115 | } |
| 116 | |
| 117 | |
| 118 | { |
102 | 119 | Digraph d; |
103 | 120 | Digraph::NodeMap<int> order(d); |
104 | 121 | Graph g(d); |