public ANode search(Staterep state) { ANode node = new ANode(state); HashedPriorityQueue<ANode> nyilt = new HashedPriorityQueue<ANode>(11, new TotalCostComparator()); nyilt.offer(node); HashMap<ANode, ANode> closed = new HashMap<ANode, ANode>(); while ((node = nyilt.poll()) != null && !node.getState().isGoal()) { kiterjeszt(nyilt, closed, node); closed.put(node, node); novelKiterjesztes(); } return node; }
protected void kiterjeszt( HashedPriorityQueue<ANode> open, HashMap<ANode, ANode> closed, ANode node) { while (node.hasMoreChildren()) { ANode child = node.getNextChild(); if (open.contains(child)) { ANode oldNode = open.get(child); if (child.getCost() < oldNode.getCost()) { open.remove(child); open.offer(child); } } else if (closed.containsKey(child)) { ANode oldNode = closed.get(child); if (child.getCost() < oldNode.getCost()) { closed.remove(child); open.offer(child); } } else { open.offer(child); } } }