diff --git a/algorithm/italiano.h b/algorithm/italiano.h index 89fa9d8..1413789 100644 --- a/algorithm/italiano.h +++ b/algorithm/italiano.h @@ -52,6 +52,33 @@ bool Italiano::query(const T& u, const T& v) { template void Italiano::remove(const T& u, const T& v) { + + for (const auto& w : G.adjMatrix) { + // Check if (u,v) edge of T(w) || p(w,v) points to (u,v) + + // If yes => set p(w, v) to point to the next edge (u',v) in Ein(v) + // If (u,v) the last edge, then set it to point to null + + // If T(w) contains u' then the new edge reconnects v to T(w) + // As this needs to be checked, we set R(w) <- {v} + + // If (u,v) is not edge of T(w) or is the last edge in Ein(v), R(w) <- phi + + // Remove (u,v) from Eout(u) and Ein(v) + } + + for (const auto& w : G.adjMatrix) { + + // Check tentative pointers of the vertices in R(w). + // While there is a vertex x in R(w), scan the edges in Ein(x), starting + // from the edge pointed to by p(w,x), until an edge (u',x) for which + // p(w,u') != null is found or Ein(x) is exhausted. + + // If such edge is found, x is removed from R(w). + // If the list is exhausted, set p(w,x) to null and M(w,x) to 0 + + // Then scan all Eout(x). If (x,x') is tree edge, add x' to R(w) + } } diff --git a/graph/graph.h b/graph/graph.h index 7e2bae6..5f66243 100644 --- a/graph/graph.h +++ b/graph/graph.h @@ -45,6 +45,8 @@ Graph::~Graph() { template inline void Graph::insert(const T& u, const T& v) { Graph::adjMatrix[u].insert(v); + Graph::adjMatrix[v]; + } template diff --git a/test/graph_test.cc b/test/graph_test.cc index 8365ea7..e6d957d 100644 --- a/test/graph_test.cc +++ b/test/graph_test.cc @@ -45,13 +45,13 @@ TEST_SUITE("Graph") { CHECK_EQ(R, X); } - TEST_CASE("Digraph::V and Digraph::E") { + TEST_CASE("Graph::V and Graph::E") { // 1 --> 2 --> 3 --> 1 // 3 --> 4 --> 5 --> 3 // 2 --> 6 --> 7 --> 8 --> 6 // 6 --> 9 --> 10 --> 11 --> 12 --> 13 --> 9 // 12 --> 10 - Digraph G; + Graph G; G.insert(1, 2); G.insert(2, 3); G.insert(3, 1);