public void setAsVisited(AbstractElement e) {
    if (e instanceof Edge) {
      if (e.getVisitedKey() < 1) {
        numOfCoveredEdges++;
      }
    } else if (e instanceof Vertex) {
      if (e.getVisitedKey() < 1) {
        numOfCoveredVertices++;
      }
    }

    e.setVisitedKey(e.getVisitedKey() + 1);

    if (!e.getReqTagKey().isEmpty()) {
      Hashtable<String, Integer> reqs = getAllRequirements();
      String[] tags = e.getReqTagKey().split(",");
      for (String tag : tags) {
        reqs.put(tag, reqs.get(tag) + 1);
      }
    }
  }
  public void setAsUnvisited(AbstractElement e) {
    Integer visits = e.getVisitedKey();
    e.setVisitedKey(e.getVisitedKey() - 1);
    if (e instanceof Edge) {
      if (e.getVisitedKey() < 1) {
        numOfCoveredEdges--;
      }
    } else if (e instanceof Vertex) {
      if (e.getVisitedKey() < 1) {
        numOfCoveredVertices--;
      }
    }

    if (visits <= 0) logger.error(e + ", has a negative number in VISITED_KEY");

    if (!e.getReqTagKey().isEmpty()) {
      Hashtable<String, Integer> reqs = getAllRequirements();
      String[] tags = e.getReqTagKey().split(",");
      for (String tag : tags) {
        reqs.put(tag, reqs.get(tag) - 1);
      }
    }
  }