public void removeUnreachable() {
		if ((preOrder == null) || (edgeModCount != preOrder.edgeModCount)) {
			buildLists();
		}

		final Iterator iter = nodes.entrySet().iterator();

		while (iter.hasNext()) {
			final Map.Entry e = (Map.Entry) iter.next();

			final GraphNode v = (GraphNode) e.getValue();

			if (v.preOrderIndex() == -1) {
				iter.remove();
			}
		}
	}