public void solveProblem() { timer = new Stopwatch(); timer.Start(); counter = 0; max = 0; Console.Out.WriteLine(); initializeSolver(); stack.Push(new TSPSolution(Cities[0])); bool debug = true; while (stack.Count != 0 && (timer.Elapsed.TotalSeconds <= 20 || debug)) { counter++; if (stack.Count > max) { max = stack.Count; } updateUI(); TSPSolution parent = stack.Pop(); if (parent.getBound() >= bssf.costOfRoute()) { continue; } //if (parent.isCrossed()) // continue; List <TSPSolution> children = parent.makeChildren(); foreach (TSPSolution child in children) { if (child.getBound() < bssf.costOfRoute()) { if (child.isSolution()) { Console.Out.WriteLine("Solution: {0}", child.costOfRoute()); bssf = child; } else { stack.Push(child); } } // else discard it (don't explore) } } timer.Stop(); updateUI(); }