Come to think of it, we don't need to maintain a list of closed nodes; we can

just use a flag.


git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@1131 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
Andrzej Kapolka
2011-03-25 03:19:51 +00:00
parent 5dab9cfab2
commit f0ff20fd23
@@ -23,14 +23,12 @@ package com.threerings.media.util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.SortedSet; import java.util.SortedSet;
import java.util.TreeSet; import java.util.TreeSet;
import java.awt.Point; import java.awt.Point;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.samskivert.util.HashIntMap; import com.samskivert.util.HashIntMap;
@@ -187,7 +185,7 @@ public class AStarPathUtil
stepper.considerSteps(n.x, n.y); stepper.considerSteps(n.x, n.y);
// push the node on the closed list // push the node on the closed list
info.closed.add(n); n.closed = true;
} }
// return the best path we could find if we were asked to do so // return the best path we could find if we were asked to do so
@@ -248,7 +246,7 @@ public class AStarPathUtil
// skip if it's already in the open or closed list or if its // skip if it's already in the open or closed list or if its
// actual cost is less than the just-calculated cost // actual cost is less than the just-calculated cost
if ((info.open.contains(np) || info.closed.contains(np)) && np.g <= newg) { if ((info.open.contains(np) || np.closed) && np.g <= newg) {
return; return;
} }
@@ -263,7 +261,7 @@ public class AStarPathUtil
np.f = np.g + np.h; np.f = np.g + np.h;
// remove it from the closed list if it's present // remove it from the closed list if it's present
info.closed.remove(np); np.closed = false;
// add it to the open list for further consideration // add it to the open list for further consideration
info.open.add(np); info.open.add(np);
@@ -325,9 +323,6 @@ public class AStarPathUtil
/** The set of open nodes being searched. */ /** The set of open nodes being searched. */
public SortedSet<Node> open; public SortedSet<Node> open;
/** The set of closed nodes being searched. */
public Set<Node> closed;
/** The destination coordinates in the tile array. */ /** The destination coordinates in the tile array. */
public int destx, desty; public int destx, desty;
@@ -346,7 +341,6 @@ public class AStarPathUtil
// construct the open and closed lists // construct the open and closed lists
open = new TreeSet<Node>(); open = new TreeSet<Node>();
closed = Sets.newIdentityHashSet();
} }
/** /**
@@ -422,6 +416,9 @@ public class AStarPathUtil
/** The node's monotonically-increasing unique identifier. */ /** The node's monotonically-increasing unique identifier. */
public int id; public int id;
/** Whether or not this node is on the closed list. */
public boolean closed;
public Node (int x, int y) { public Node (int x, int y) {
this.x = x; this.x = x;
this.y = y; this.y = y;