所以在我的节点的值中,我不断得到超出界限的数字。这是算法:
public void prims(Node parentNode, ArrayList<Node> frontiers){
Node rootNode = parentNode;
Node newTile;
Node tempParent;
ArrayList<Node> children;
if(frontiers == null){
frontiers = new ArrayList<Node>();
}
int x = parentNode.getValue().getX();
int y = parentNode.getValue().getY();
isRevealed[x][y] = true;
addFrontier(x-1, y, frontiers, parentNode);
addFrontier(x+1, y, frontiers, parentNode);
addFrontier(x, y-1, frontiers, parentNode);
addFrontier(x, y+1, frontiers, parentNode);
while(!frontiers.isEmpty()){
newTile = frontiers.get((int)(frontiers.size()*Math.random()));
x = newTile.getValue().getX();
y = newTile.getValue().getY();
if(x < 0){
int i = 9;
}
isRevealed[x][y] = true;
children = newTile.getChildren();
if(children.size() != 0){
tempParent = children.get((int)(children.size()*Math.random()));
newTile.clearChildren();
tempParent.addChild(newTile);
if(newTile.getValue().getX() < 0){
int j = 0;
}
}
frontiers.remove(newTile);
addFrontier(x-1, y, frontiers, newTile);
addFrontier(x+1, y, frontiers, newTile);
addFrontier(x, y-1, frontiers, newTile);
addFrontier(x, y+1, frontiers, newTile);
}
}
public void addFrontier(int x, int y, ArrayList<Node> frontiers, Node parent){
Node frontier = new Node(new Point2D(x,y), parent);
//TODO check if x and y correspond to height and width properly (in case it isn't working for some reason)
if(x >= 0 && y >= 0 && x < width && y < height){
if(isRevealed[x][y]){
return;
}
if(frontiers.contains(frontier)){
for(Node node : frontiers){
if(node.equals(frontier)){
node.addChild(parent);
}
}
}else{
frontier.addChild(parent);
frontiers.add(frontier);
}
}
}
Node和Point2D是我为完成此算法而制作的自定义类。我遇到的问题是,在“addFrontier”类中,我检查值是否在边界内,但是当我放置断点并检查根节点的子节点时,我得到-1,0 1,0 0,-1 0,1按此顺序。我也注意到,当我在GUI中绘制它时,我得到的图形看起来就像网格线而不是生成树。
如果我需要添加任何信息,请告诉我。
另请注意,Node类检查节点是否正在尝试添加将其自身作为父节点的子节点。此外,Node类的equals方法仅检查该值是否与两个节点相同。