public void Initialize() { try { var colorCount = ColorQueue.Count; for (int i = 0; i < colorCount; i++) { var tmpNode = new Node { CubeNode = new Cube(6, 4, ColorQueue.Dequeue()), IsVisted = false }; Nodes.Add(tmpNode); } for (int i = 0; i < Nodes.Count; i++) { var tmpMeetMiddle = new MeetMiddleGraph(Nodes.ToArray()[i]) { DestinationGraph = DestinationGraph }; MeetMiddleGraphs.Add(tmpMeetMiddle); } } catch (Exception e) { throw new Exception(e.Message); } }
public void Execute() { try { var meetMiddleGraphArray = MeetMiddleGraphs.ToArray(); while (IsSearching) { // Excutes the destination graph multiple times (parallel execution) var executeDesitnationGraph = Task.Factory.StartNew(() => DestinationGraph.Execute()) .ContinueWith(prevTask => DestinationGraph.Execute()) .ContinueWith((prevTask) => DestinationGraph.Execute()); Task.WaitAny(executeDesitnationGraph); executeDesitnationGraph = Task.Factory.StartNew(() => DestinationGraph.Execute()) .ContinueWith(prevTask => DestinationGraph.Execute()) .ContinueWith((prevTask) => DestinationGraph.Execute()); Task.WaitAny(executeDesitnationGraph); // If one of the nodes generated is solved break from this loop if (!DestinationGraph.IsGraphUnSolved) { break; } var tmpTask = Task.Factory.StartNew(() => meetMiddleGraphArray[0].Execute()); var tmpTask1 = Task.Factory.StartNew(() => meetMiddleGraphArray[1].Execute()); var tmpTask2 = Task.Factory.StartNew(() => meetMiddleGraphArray[2].Execute()); Task.WaitAll(tmpTask, tmpTask1, tmpTask2); if (!DestinationGraph.IsGraphUnSolved) { break; } var tmpTask4 = Task.Factory.StartNew(() => meetMiddleGraphArray[3].Execute()); var tmpTask5 = Task.Factory.StartNew(() => meetMiddleGraphArray[4].Execute()); var tmpTask6 = Task.Factory.StartNew(() => meetMiddleGraphArray[5].Execute()); Task.WaitAll(tmpTask4, tmpTask5, tmpTask6); if (!DestinationGraph.IsGraphUnSolved) { break; } /* * Console.WriteLine( * string.Format("first " + " " + DestinationGraph.Nodes.Count() + " " + * meetMiddleGraphArray[0].Nodes.Count() + " " + * meetMiddleGraphArray[1].Nodes.Count() + " " + * meetMiddleGraphArray[5].Nodes.Count() + " " + * meetMiddleGraphArray[2].Nodes.Count() + " " + * meetMiddleGraphArray[3].Nodes.Count() + " " + * meetMiddleGraphArray[4].Nodes.Count())); */ } } catch (Exception e) { throw new Exception(e.Message); } }