`
橡树心
  • 浏览: 47871 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

八个皇后(Queen)

J# 
阅读更多
问题说明:

       西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上?

public class Queen {
    // 同位置是否有皇后,1表示有 
    private int[] column;
    // 右上至左下是否有皇后
    private int[] rup; 
    // 左上至右下是否有皇后
    private int[] lup;
    // 解答
    private int[] queen;
    
    // 解答编号
    private int num;
    
    public Queen() {
        column = new int[8+1];
        rup = new int[2*8+1];
        lup = new int[2*8+1];
        
        for(int i = 1; i <= 8; i++) 
            column[i] = 1; 

        for(int i = 1; i <= 2*8; i++) 
            rup[i] = lup[i] = 1; 
        
        queen = new int[8+1];
    }
    
    public void backtrack(int i) {
        if(i > 8) { 
            showAnswer();
        } 
        else { 
            for(int j = 1; j <= 8; j++) { 
                if(column[j] == 1 && 
                   rup[i+j] == 1 && 
                   lup[i-j+8] == 1) { 
                    queen[i] = j; 
                    // 设定为占用
                    column[j] = rup[i+j] = lup[i-j+8] = 0; 
                    backtrack(i+1); 
                    column[j] = rup[i+j] = lup[i-j+8] = 1; 
                } 
            } 
        } 
    }
    
    protected void showAnswer() {
        num++;
        System.out.println("\n解答 " + num);
        for(int y = 1; y <= 8; y++) {
            for(int x = 1; x <= 8; x++) {
                if(queen[y] == x) {
                    System.out.print(" Q");
                }
                else {
                    System.out.print(" .");
                }
            }
            System.out.println();
        }
    }
    
    public static void main(String[] args) {
        Queen queen = new Queen();
        queen.backtrack(1);
    }
}

分享到:
评论

相关推荐

    在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击

    其基本描述是在一个8×8的国际象棋盘上放置八个皇后,要求这些皇后彼此之间不能相互攻击。也就是说,任何两个皇后都不能位于同一行、同一列或同一条对角线上。问题的目标是找出所有可能的布局方案。 #### 二、问题...

    N-queen 八皇后

    - `if_in_queen`函数用于检查当前位置是否与已有的皇后冲突。 - `my_compare_y`函数用于比较当前尝试的皇后位置是否与之前尝试过的位置重复。 - `print`函数用于输出最终的解决方案。 #### 深入分析: 在`my_...

    C++ 数据结构 Queen 八皇后问题

    使用回溯来解决八皇后问题。 请参见《心希盼说明-queen》

    Eight Queen's Problem八皇后问题演示系统

    八皇后问题 Eight Queen's Problem八皇后问题演示系统

    NQueen N皇后问题java实现

    在Java中,我们可以创建一个棋盘类(Chessboard)来存储棋盘的状态,以及一个皇后类(Queen)来表示每个皇后的位置。同时,我们还需要一个主程序类(如NQueenSolver)来驱动整个解题过程。 在描述中提到,程序目前...

    eight_queen_queen_C++_八皇后_

    八皇后问题是一个经典的计算机编程问题,源自于19世纪由数学家鲁道夫·费迪南德·莱昂哈德·欧拉提出,其目标是在一个8x8的棋盘上放置八个皇后,使得任何两个皇后都无法在同一行、同一列或同一对角线上互相攻击。...

    huanghou.rar_8 queen_八皇后 _八皇后c

    在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"发现很少有关于C#的算法,这是最近写的一个八皇后的算法我写了很详细的注解。

    八皇后 的三种解法 (java编写)

    八皇后问题是一个经典的回溯算法问题,源自19世纪的数学家欧拉提出,旨在在8×8的棋盘上放置8个皇后,使得任意两个皇后都无法通过直线互相攻击,即任意一行、一列或对角线上都不能有多个皇后。这个问题具有很高的...

    Queen八皇后_源代码

    采用随机算法解决,算是比较新的非经典算法。

    nQueen皇后问题

    皇后问题:输入皇后个数,找到所有满足条件的路径

    N-QUEEN.zip_n个皇后算法_queen

    在一个N×N的国际象棋棋盘中摆N个皇后,使这N个皇后不能互相被对方吃掉。 N皇后算法源码

    八皇后 queen

    C语言写的八皇后问题,挺简洁的,请大家多多指教了

    Nqueen.rar_NQueen_N皇后_N皇后问题_visual c

    在“Nqueen.rar”这个压缩包中,我们很可能是得到了一个用Visual C编写的程序,用于演示如何解决N皇后问题。Visual C是一种流行的面向对象的编程语言,它提供了丰富的库函数和高效的性能,适合开发这样的算法实现。 ...

    八皇后问题并行算法及源代码(附N皇后)

    八皇后问题是一个经典的问题,在棋盘上放置八个皇后,使得任意两个皇后都无法在同一行、同一列或同一条对角线上,从而找到所有可能的摆放方案。这个问题在计算机科学中常被用来作为解决约束满足问题的实例,同时也...

    knight“八皇后”问题归朔法求解

    八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。...

    MATLAB八皇后问题程序.rar_eight queen_八皇后 _八皇后 matlab_八皇后问题

    八皇后问题盲目搜索法,智能控制课程设计2018。

    八皇后问题的scheme解法(queen8.scm)

    收集的用scheme语言编写的八皇后的解法,对学习scheme语言想理解递归的同志们是一个好例子,sicp中也有此练习题。

    AI_8Queen.zip_8queen_Help!_queen

    八皇后问题,作为一个经典的问题,其挑战在于在8×8的棋盘上摆放8个皇后,使得任何两个皇后都不能在同一行、同一列或同一对角线上。这个问题在计算机科学中常常被用作教学示例,因为它涉及到搜索算法和回溯策略。本...

    八皇后问题并图形化显示

    解决八皇后问题。从第一行开始,放第一个皇后,放好皇后以后,她...并给8个皇后编号。 void initChessboard(); //回溯求八皇后问题的所有解,皇后协调算法 void queenCoordinate(); //输出所有解 void printResult();

    java 编程8皇后问题

    8皇后问题复杂性描述,输入一定方格个数,即可输出最好的排列方式。

Global site tag (gtag.js) - Google Analytics