Tested DFS direction assisted search.

This commit is contained in:
Harrison Deng 2020-04-22 19:41:25 -05:00
parent ed48e164b6
commit 4ed9d4d272
2 changed files with 27 additions and 9 deletions

View File

@ -14,6 +14,8 @@ public class DepthFirstSearch {
private Node endNode; private Node endNode;
private HashSet<Node> checkedNodes; private HashSet<Node> checkedNodes;
private int maxNodesSearched = -1; private int maxNodesSearched = -1;
private int foundX;
private int foundY;
public DepthFirstSearch() { public DepthFirstSearch() {
checkedNodes = new HashSet<>(); checkedNodes = new HashSet<>();
@ -43,16 +45,16 @@ public class DepthFirstSearch {
startNode = new Node(null, x, y); startNode = new Node(null, x, y);
} }
public void setEndPosition(int x, int y) { public void setDirectionPosition(int x, int y) {
endNode = new Node(null, x, y); endNode = new Node(null, x, y);
} }
public int getEndX() { public int getEndX() {
return endNode.x; return foundX;
} }
public int getEndY() { public int getEndY() {
return endNode.y; return foundY;
} }
public void deleteTree() { public void deleteTree() {
@ -118,7 +120,8 @@ public class DepthFirstSearch {
n.child[2] = new Node(n, n.x, n.y + 1); n.child[2] = new Node(n, n.x, n.y + 1);
n.child[3] = new Node(n, n.x, n.y - 1); n.child[3] = new Node(n, n.x, n.y - 1);
} else { } else {
endNode = n; foundX = n.x;
foundY = n.y;
return true; return true;
} }
if (checkedNodes.add(n)) { if (checkedNodes.add(n)) {
@ -133,6 +136,9 @@ public class DepthFirstSearch {
return false; return false;
} }
public int getSearchedCount() {
return checkedNodes.size();
}
private class Node implements Comparable<Node> { private class Node implements Comparable<Node> {
public Node[] child; public Node[] child;
public Node parent; public Node parent;

View File

@ -99,7 +99,7 @@ public class DepthFirstSearchTest {
{ {
dfs.setValidatable(new Validator(mapA)); dfs.setValidatable(new Validator(mapA));
dfs.setStartPosition(1, 2); dfs.setStartPosition(1, 2);
dfs.setEndPosition(1, 0); dfs.setDirectionPosition(1, 0);
assertTrue(dfs.buildPathToEndNode()); assertTrue(dfs.buildPathToEndNode());
} }
@ -108,7 +108,7 @@ public class DepthFirstSearchTest {
{ {
dfs.setValidatable(new Validator(mapB)); dfs.setValidatable(new Validator(mapB));
dfs.setStartPosition(3, 0); dfs.setStartPosition(3, 0);
dfs.setEndPosition(3, 2); dfs.setDirectionPosition(3, 2);
assertTrue(dfs.buildPathToEndNode()); assertTrue(dfs.buildPathToEndNode());
} }
@ -117,7 +117,7 @@ public class DepthFirstSearchTest {
{ {
dfs.setValidatable(new Validator(mapD)); dfs.setValidatable(new Validator(mapD));
dfs.setStartPosition(0, 0); dfs.setStartPosition(0, 0);
dfs.setEndPosition(0, 3); dfs.setDirectionPosition(0, 3);
assertTrue(dfs.buildPathToEndNode()); assertTrue(dfs.buildPathToEndNode());
} }
@ -126,7 +126,7 @@ public class DepthFirstSearchTest {
{ {
dfs.setValidatable(new Validator(mapC)); dfs.setValidatable(new Validator(mapC));
dfs.setStartPosition(3, 0); dfs.setStartPosition(3, 0);
dfs.setEndPosition(3, 2); dfs.setDirectionPosition(3, 2);
assertFalse(dfs.buildPathToEndNode()); assertFalse(dfs.buildPathToEndNode());
} }
@ -135,7 +135,7 @@ public class DepthFirstSearchTest {
{ {
dfs.setValidatable(new Validator(mapE)); dfs.setValidatable(new Validator(mapE));
dfs.setStartPosition(3, 0); dfs.setStartPosition(3, 0);
dfs.setEndPosition(3, 2); dfs.setDirectionPosition(3, 2);
assertFalse(dfs.buildPathToEndNode()); assertFalse(dfs.buildPathToEndNode());
} }
@ -211,4 +211,16 @@ public class DepthFirstSearchTest {
assertFalse(dfs.findTarget(validator)); assertFalse(dfs.findTarget(validator));
} }
@Test
public void testDFSFindEndNodeMapHWithAssistValid() {
Validator validator = new Validator(mapH);
dfs.setValidatable(validator);
dfs.setStartPosition(3, 0);
dfs.setDirectionPosition(42, 84);
assertTrue(dfs.findTarget(validator));
assertEquals(95, dfs.getEndX());
assertEquals(49, dfs.getEndY());
}
} }