/** * Searches the biggest cluster in the given Network. The Network is not modified. */ public Map<Id<Node>, Node> searchBiggestCluster(Network network) { final Map<Id<Node>, Node> visitedNodes = new TreeMap<>(); Map<Id<Node>, Node> biggestCluster = new TreeMap<>(); log.info("running " + this.getClass().getName() + " algorithm..."); // search the biggest cluster of nodes in the network log.info(" checking " + network.getNodes().size() + " nodes and " + network.getLinks().size() + " links for dead-ends..."); boolean stillSearching = true; Iterator<? extends Node> iter = network.getNodes().values().iterator(); while (iter.hasNext() && stillSearching) { Node startNode = iter.next(); if (!visitedNodes.containsKey(startNode.getId())) { Map<Id<Node>, Node> cluster = this.findCluster(startNode, network); visitedNodes.putAll(cluster); if (cluster.size() > biggestCluster.size()) { biggestCluster = cluster; if (biggestCluster.size() >= (network.getNodes().size() - visitedNodes.size())) { // stop searching here, because we cannot find a bigger cluster in the lasting nodes stillSearching = false; } } } } log.info(" The biggest cluster consists of " + biggestCluster.size() + " nodes."); log.info(" done."); return biggestCluster; }