diff --git a/algorithm/italiano.h b/algorithm/italiano.h index 89fa9d8..b151694 100644 --- a/algorithm/italiano.h +++ b/algorithm/italiano.h @@ -53,6 +53,32 @@ 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) + } } } // namespace algo