利用栈解决八皇后问题

发布于 2022-09-06 00:48:43 字数 1768 浏览 14 评论 0

//定义棋盘位置

class Point{
    int x = -1;
    int y = -1;
    public Point() {}
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class HuangHou {
    private int stackSize = 8; //定义栈的深度
    public void placeQueen(Stack<Point> pointStack, int row2,int col2){
        for (int row = row2; row < stackSize; row++) {
            for (int col = col2; col < stackSize; col++) {
                Point point = new Point(row, col);
                pointStack.push(point);
                if (judge(pointStack)) {
                    //递归开始判断第二行
                    if (row < stackSize - 1) {
                        placeQueen(pointStack, row+1, 0);
                    }else {
                        //打印出来
                        if (pointStack.getTop() == stackSize - 1) {
                            System.out.println("*********有结果***********");
                    }
                }else {
                    pointStack.pop();
                }
            }
        }
    }
    
    //判断位置是否合法
    public boolean judge(Stack<Point> pointStack){
        Object[] data = pointStack.getData();
        Point topPoint = (Point) pointStack.peek();
        for (int i = 0; i < pointStack.getTop(); i++) {
            Point point = (Point) data[i];
            int x = point.x;
            int y = point.y;
            //是否在同一行
            if (x == topPoint.x) {
                return false;
            }
            //是否在同一列
            if (y == topPoint.y) {
                return false;
            }
            //是否在对角线上
            if (Math.abs(topPoint.x - x) == Math.abs(topPoint.y - y)) {
                return false;
            }
        }
        return true;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文