Reworked operation order for DFS.

This commit is contained in:
Harrison Deng 2020-04-27 20:35:32 -05:00
parent 250334e348
commit 2a0f26f8bc

View File

@ -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]);
}
}
}