예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }