bool Graph::isConnected (Vertices *V) { Vertices *nextVertices = new Vertices(); int reachedsize = 1; bool first = true; for (Vertices::iterator it = V->begin(); it != V->end(); ++it) { int v = *it; if (first) { nextVertices->insert(v); reachedVertices[v] = true; first = false; } else { reachedVertices[v] = false; } } while (!nextVertices->empty()) { Vertices::iterator it = nextVertices->end(); --it; int currentVertex = *it; nextVertices->erase(it); Vertices *adjList = adjacencySets[currentVertex]; for (Vertices::iterator it = adjList->begin(); it != adjList->end(); ++it) { int adjV = *it; if (V->find(adjV) != V->end()) { if (!reachedVertices[adjV]) { reachedVertices[adjV] = true; reachedsize++; nextVertices->insert(adjV); } } } } delete nextVertices; return reachedsize == (int) V->size(); }