public override int[] GetPath(int n, IMeasure measure) { var baseState = new GenerationState { C = new double[n,n], Edges = new List<Edge>(n), N = n, VertexSet = new int[n] }; baseState.C = measure.GetMatrix(); for (int i = 0; i < n; i++) { baseState.C[i, i] = Inf; } baseState.J = ReductMatrix(n, baseState.C); for (int i = 0; i < n; i++) { baseState.VertexSet[i] = i; } var queue = new PriorityQueue<GenerationState>((a, b) => -a.J.CompareTo(b.J)); queue.Enqueue(baseState); while (queue.Count > 0) { var current = queue.Dequeue(); if (current.Edges.Count == n - 1) { var result = GetResult(n, current.Edges); return result; } Process(current, queue); } throw new ApplicationException("Path not found"); }