栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

八皇后问题java实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

八皇后问题java实现

问题描述
八皇后是基于国际象棋,进行一个小游戏:在一个8 * 8的棋盘上,放置8个皇后(就是8个位置棋子),每个皇后与其他皇后不能在同一行和同一列或者是同一个斜线上,需要寻找摆放位置。
问题分析
1、需要使用一个二维数据array[][] 分别代表皇后放置在第几行,第几列。
2、皇后放置不能越界
3、判断皇后的位置不与其他皇后冲突,即每个皇后坐标不能有相同的横坐标或者是纵坐标,斜线上判断横坐标与横坐标相减绝对值不能等于纵坐标与纵坐标相减的绝对值。
4、从第一行第一列开始排列,利用回溯的思想,进行寻找
代码实现

public class EightQueen {

    
    private int[] queen;

    
    public void setQueen(int n){
        queen = new int[n];
        
        for (int i = 0 ;i < n ;i++){
            queen[i] = -1;
        }
        int r = 0; // 代表行数
        
        while (true){
            // 当前行放置皇后位置,比上一次需要往后挪动一个
            queen[r] += 1;
            // 判断当前皇后位置,是否已经越界,未越界情况下,继续判断是否冲突
            if (queen[r] >= n ){
                // 如果已经越界,说明当前行的位置与之前的皇后位置都有冲突,则需要回头挪动上一行的皇后
                if (r>0) {// 需要在回退行大于第0行的情况下,才进行回退,否则第0行的皇后都越界了,说明不需要再进行寻找了
                    queen[r] = -1; // 设置当前行皇后为初始无放置状态
                    r--;// 回退一行
                    continue; // 继续寻找合适位置逻辑
                } else {
                    // 结束循环
                    break;
                }
            }
            
            if (!isConflict(r)){
                // 当前旗子没有冲突,将当前行皇后安放号,准备安放下一行皇后
                r++; // 行向后挪动一位
                if (r >= n){ // 判断向下的行是否已经到了最大行,如果已经是最大行,则说明完成了一次放置,进行回溯处理
                    // 打印当前皇后位置摆放
                    for (int i = 0;i < n;i++){
                        System.out.print(queen[i]+" ");
                    }
                    System.out.println();
                    r--;
                    
                    
                }
            }
            
        }
    }

    
    public boolean isConflict(int k){
        for (int i = k -1;i>-1;i--){
            if (queen[k] == queen[i] || Math.abs(queen[k]-queen[i])==Math.abs(k - i)){
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        EightQueen eightQueen = new EightQueen();
        eightQueen.setQueen(8);
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号