Reworked operation order for DFS.
This commit is contained in:
parent
250334e348
commit
2a0f26f8bc
@ -98,24 +98,27 @@ public class DepthFirstSearch {
|
|||||||
|
|
||||||
queue.clear();
|
queue.clear();
|
||||||
checkedNodes.clear();
|
checkedNodes.clear();
|
||||||
|
|
||||||
|
|
||||||
DFSNode begin = startNode;
|
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);
|
queue.add(begin);
|
||||||
while (!queue.isEmpty()) {
|
while (!queue.isEmpty()) {
|
||||||
DFSNode n = queue.poll();
|
DFSNode n = queue.poll();
|
||||||
if (maxNodesSearched != -1 && checkedNodes.size() > maxNodesSearched)
|
if (maxNodesSearched != -1 && checkedNodes.size() > maxNodesSearched) return false;
|
||||||
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[0] = new DFSNode(n, n.getX() + 1, n.getY(), endNode);
|
||||||
n.child[1] = 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[2] = new DFSNode(n, n.getX(), n.getY() + 1, endNode);
|
||||||
n.child[3] = 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++) {
|
for (int c = 0; c < n.child.length; c++) {
|
||||||
DFSNode child = n.child[i];
|
if (checkedNodes.add(n.child[c]) && coordValidatable.validate(n.child[c].x, n.child[c].y)) {
|
||||||
queue.add(child);
|
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