即使我在为迷宫生成实施Prim的同时检查它的边界,我仍然在我的树中获得-1

时间:2017-04-18 02:07:19

标签: java maze prims-algorithm

所以在我的节点的值中,我不断得到超出界限的数字。这是算法:

    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方法仅检查该值是否与两个节点相同。

0 个答案:

没有答案