Reworked operation order for DFS.
This commit is contained in:
parent
250334e348
commit
2a0f26f8bc
@ -98,24 +98,27 @@ public class DepthFirstSearch {
|
||||
|
||||
queue.clear();
|
||||
checkedNodes.clear();
|
||||
|
||||
|
||||
DFSNode begin = startNode;
|
||||
if (!coordValidatable.validate(begin.x, begin.y)) return false;
|
||||
if (targetValidator.isCoordinateTarget(begin.x, begin.y)) return true;
|
||||
checkedNodes.add(begin);
|
||||
queue.add(begin);
|
||||
while (!queue.isEmpty()) {
|
||||
DFSNode n = queue.poll();
|
||||
if (maxNodesSearched != -1 && checkedNodes.size() > maxNodesSearched)
|
||||
return false;
|
||||
if (checkedNodes.add(n) && coordValidatable.validate(n.getX(), n.getY())) {
|
||||
if (targetValidator.isCoordinateTarget(n.getX(), n.getY())) {
|
||||
foundNode = new DFSNode(n.getParent(), n.getX(), n.getY(), null);
|
||||
return true;
|
||||
}
|
||||
n.child[0] = new DFSNode(n, n.getX() + 1, n.getY(), endNode);
|
||||
n.child[1] = new DFSNode(n, n.getX() - 1, n.getY(), endNode);
|
||||
n.child[2] = new DFSNode(n, n.getX(), n.getY() + 1, endNode);
|
||||
n.child[3] = new DFSNode(n, n.getX(), n.getY() - 1, endNode);
|
||||
for (int i = 0; i < n.child.length; i++) {
|
||||
DFSNode child = n.child[i];
|
||||
queue.add(child);
|
||||
if (maxNodesSearched != -1 && checkedNodes.size() > maxNodesSearched) return false;
|
||||
n.child[0] = new DFSNode(n, n.getX() + 1, n.getY(), endNode);
|
||||
n.child[1] = new DFSNode(n, n.getX() - 1, n.getY(), endNode);
|
||||
n.child[2] = new DFSNode(n, n.getX(), n.getY() + 1, endNode);
|
||||
n.child[3] = new DFSNode(n, n.getX(), n.getY() - 1, endNode);
|
||||
for (int c = 0; c < n.child.length; c++) {
|
||||
if (checkedNodes.add(n.child[c]) && coordValidatable.validate(n.child[c].x, n.child[c].y)) {
|
||||
if (targetValidator.isCoordinateTarget(n.child[c].x, n.child[c].y)) {
|
||||
foundNode = n.child[c];
|
||||
return true;
|
||||
}
|
||||
queue.add(n.child[c]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user