public void doExperiment() {
		int i = 0;
		long startTime = System.currentTimeMillis();
		for (Node fromNode : graph.getNodes()) {
			Dijkstra dijkstra = new Dijkstra(MAXNODES);
			dijkstra.computePaths(fromNode);
			if(++i % 100 == 0)
			{
				long endTime   = System.currentTimeMillis();
				long totalTime = (endTime - startTime) / 1000;
				int hours = (int) totalTime / 3600;
			    int remainder = (int) totalTime - hours * 3600;
			    int mins = remainder / 60;
			    remainder = remainder - mins * 60;
			    int secs = remainder;
				System.out.println("Iteration: " + i + "\nTime passed " + hours + ":" + mins + ":" + secs + "s");
			}
			for (Node toNode : graph.getNodes()) {
				if (toNode == fromNode)
					continue;
				
				int shortest = dijkstra.getShortestPathTo(toNode);
				if(shortest != Dijkstra.INFINITY)	// if is connected
				{
//					if(i < 100)
						stressDistribution(fromNode, toNode, dijkstra);
					Integer count = shortestLengthDistribution.get(shortest);
					if (count == null) {
						shortestLengthDistribution.put(shortest, 1);
					}
					else {
						shortestLengthDistribution.put(shortest, count + 1);
					}
					connectedNodes++;
					sumPath += shortest;
					if(networkDiameter < shortest)
						networkDiameter = shortest;
				}
				else
				{
					unconnectedNodes++;
				}
					
				//System.out.println(fromNode + " to " + toNode + " -> " + dijkstra.getShortestPathTo_S(toNode));
			}
		}
		
		avgPath = (float) sumPath /  (float) connectedNodes;
		sixDegreesOfSeparation = networkDiameter <= 6 && unconnectedNodes == 0;
		
		setResult();
	}