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();
}