Tested DFS direction assisted search.
This commit is contained in:
parent
ed48e164b6
commit
4ed9d4d272
@ -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;
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user