public void Solve() { AllSolutions = new C.ConcurrentBag <LLint>(); List <T.Task> allTasks = new List <T.Task>(); foreach (var start in AllEdges(Starts)) { if (AllSolutions.Count() < MaxCountSolutions) { var Ta = new T.Task( (edgeAndStartObject) => { var edgeAndStart = (Tuple <LLint, LLint>)edgeAndStartObject; Backtracking(edgeAndStart.Item1, edgeAndStart.Item2); }, new Tuple <LLint, LLint>(Fn.Clone(AllEdges(Horizontals.Concat(Verticals.Concat(Diagonals))).Where(e => !Fn.Equal(e, start))), Fn.L(start))); allTasks.Add(Ta); Ta.Start(); } } T.Task.WaitAll(allTasks.ToArray()); #if DEBUG DebugViewResult(); #endif }
LLint AllEdges(LLint edges) { var all = Fn.Clone(edges); foreach (var edge in edges) { if (edge.Count() > 2) { all = all.Concat(SubEdges(edge.Skip(1)).Concat(SubEdges(edge.Take(edge.Count() - 1)))); } } return(all); }
public void ListprocessingFunctionalTest() { // Clonen testen // - gleiche Listen Assert.IsTrue(Fn.Equal(Fn.Clone(Fn.L(2, 3, 5, 7)), Fn.L(2, 3, 5, 7))); // - verschiedene Instanzen Assert.IsTrue(!Fn.Clone(Fn.L(2, 3, 5, 7)).Equals(Fn.L(2, 3, 5, 7))); // - Element auslesen Assert.IsTrue(5 == Fn.Get(Fn.L(2, 3, 5, 7), 2)); // - Element setzen Assert.IsTrue(Fn.Equal(Fn.Set(Fn.L(2, 3, 5, 7), 2, 13), Fn.L(2, 3, 13, 7))); // Swap Testen // - Anfang und Ende tauschen var l = Fn.Swap(Fn.L(2, 3, 5, 7), 0, 3); Assert.IsTrue(Fn.Equal(l, Fn.L(7, 3, 5, 2))); // - in der Mitte tauschen l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 1, 2); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 5, 3, 7))); // - ersten gegen Element aus Liste tauschen l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 0, 2); Assert.IsTrue(Fn.Equal(l, Fn.L(5, 3, 2, 7))); // - letzten gegen Element aus Liste tauschen l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 1, 3); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 7, 5, 3))); // -alle Test mit jetzt mit vertauschten Indizes l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 3, 0); Assert.IsTrue(Fn.Equal(l, Fn.L(7, 3, 5, 2))); l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 2, 1); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 5, 3, 7))); l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 2, 0); Assert.IsTrue(Fn.Equal(l, Fn.L(5, 3, 2, 7))); l = Fn.SwapComplex(Fn.L(2, 3, 5, 7), 3, 1); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 7, 5, 3))); // SwapOpt Testen // - Anfang und Ende tauschen l = Fn.Swap(Fn.L(2, 3, 5, 7), 0, 3); Assert.IsTrue(Fn.Equal(l, Fn.L(7, 3, 5, 2))); // - in der Mitte tauschen l = Fn.Swap(Fn.L(2, 3, 5, 7), 1, 2); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 5, 3, 7))); // - ersten gegen Element aus Liste tauschen l = Fn.Swap(Fn.L(2, 3, 5, 7), 0, 2); Assert.IsTrue(Fn.Equal(l, Fn.L(5, 3, 2, 7))); // - letzten gegen Element aus Liste tauschen l = Fn.Swap(Fn.L(2, 3, 5, 7), 1, 3); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 7, 5, 3))); // -alle Test mit jetzt mit vertauschten Indizes l = Fn.Swap(Fn.L(2, 3, 5, 7), 3, 0); Assert.IsTrue(Fn.Equal(l, Fn.L(7, 3, 5, 2))); l = Fn.Swap(Fn.L(2, 3, 5, 7), 2, 1); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 5, 3, 7))); l = Fn.Swap(Fn.L(2, 3, 5, 7), 2, 0); Assert.IsTrue(Fn.Equal(l, Fn.L(5, 3, 2, 7))); l = Fn.Swap(Fn.L(2, 3, 5, 7), 3, 1); Assert.IsTrue(Fn.Equal(l, Fn.L(2, 7, 5, 3))); }