private Queue<SearchNode> GetSolution(Board initial) { Queue<SearchNode> queue = new Queue<SearchNode>(); MinPQ<SearchNode> pq = new MinPQ<SearchNode>(); SearchNode node = new SearchNode(); node.brd = initial; node.moves = 0; // node.priority = initial.manhattan(); node.prev = null; pq.insert(node); SearchNode curNode = null; while (!pq.isEmpty()) { curNode = pq.delMin(); if (curNode.brd.isGoal()) break; Iterable<Board> qe = curNode.brd.neighbors(); Iterator it = qe.iterator(); while (it.hasNext()) { node.brd = (Board) it.next(); node.moves = curNode.moves + 1; node.prev = curNode; // node.priority = node.brd.manhattan(); queue.enqueue(node); } } if (queue.isEmpty()) return null; else { do { queue.enqueue(curNode); curNode = curNode.prev; } while (curNode != null); return queue; } }