private double computeMST(ArrayList<Integer> citiesToGo, double[][]cities, ArrayList<Integer> partialTour) {
		
		ArrayList<Integer> citiesToVisit = new ArrayList<Integer>(citiesToGo);
		ArrayList<Integer> mst = new ArrayList<Integer>(partialTour);
		
		double mstCost = 0;
		int lastAddedNode = 0;
		
		while (citiesToVisit.size() > 0) {
			
			int closestCity = 0;
			double distanceToClosestCity = Double.MAX_VALUE;
			double calculatedDistance;
			
			for (Integer cityInMST : mst) {
				for (Integer cityToVisit : citiesToVisit) {
					calculatedDistance = euclidianDistance(cities[cityInMST][0], cities[cityInMST][1], cities[cityToVisit][0], cities[cityToVisit][1]);
					
					if (calculatedDistance <= distanceToClosestCity) {
						distanceToClosestCity = calculatedDistance;
						closestCity = cityToVisit;

					}
				}
			}
			
			mst.add(citiesToVisit.remove(citiesToVisit.indexOf(closestCity)));
			mstCost += distanceToClosestCity;
			lastAddedNode = closestCity;
		}
		
		
		//
		// Find the least cost edge of the last node and add it
		// to the mstCost to get a better lower bound
		// TODO: Fix this. It is WRONG
		
		double leastCostEdge = Double.MAX_VALUE;
		double distance = 0;
		
		for (Integer node : mst) {
			if (node != lastAddedNode) {
				distance = euclidianDistance(cities[lastAddedNode][0], cities[lastAddedNode][1], cities[node][0], cities[node][1]);
				if (distance < leastCostEdge) leastCostEdge = distance;
			}
		}

		return mstCost;
	}