Esempio n. 1
0
        // find a solution to the initial board (using the A* algorithm)
        public Solver(Board initial)
        {
            pq1   = new MinHeap <Node>(initial.N * initial.N);
            pqAlt = new MinHeap <Node>(initial.N * initial.N);

            Node n    = new Node(initial, -1, null);
            Node nAlt = new Node(initial.twin(), -1, null);

            pq1.insert(n);
            pqAlt.insert(nAlt);


            while (!pq1.min().board.isGoal() && !pqAlt.min().board.isGoal())
            {
                Node temp = pq1.DelMin();

                totalMoves++;
                foreach (var t in temp.board.neighbors())
                {
                    if (temp.prev == null || !t.Equals(temp.prev.board))
                    {
                        pq1.insert(new Node(t, totalMoves, temp));
                    }
                }

                temp = pqAlt.DelMin();
                foreach (var t in temp.board.neighbors())
                {
                    if (temp.prev == null || !t.Equals(temp.prev.board))
                    {
                        pqAlt.insert(new Node(t, totalMoves, temp));
                    }
                }
            }
        }
Esempio n. 2
0
        public static void InternalMain()
        {
            MinHeap <int> h = new MinHeap <int>(7);

            h.insert(7);
            h.insert(6);
            h.insert(8);
            h.insert(9);
            h.insert(5);
            h.insert(4);
            h.insert(10);

            Console.WriteLine(h.DelMin());
            Console.WriteLine(h.DelMin());
            Console.WriteLine(h.DelMin());
            Console.WriteLine(h.DelMin());
            Console.WriteLine(h.DelMin());
            Console.WriteLine(h.DelMin());
            Console.WriteLine(h.DelMin());
            Console.Read();
        }