// 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)); } } } }
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(); }