问题说明:
西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上?
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);
}
}
分享到:
相关推荐
其基本描述是在一个8×8的国际象棋盘上放置八个皇后,要求这些皇后彼此之间不能相互攻击。也就是说,任何两个皇后都不能位于同一行、同一列或同一条对角线上。问题的目标是找出所有可能的布局方案。 #### 二、问题...
- `if_in_queen`函数用于检查当前位置是否与已有的皇后冲突。 - `my_compare_y`函数用于比较当前尝试的皇后位置是否与之前尝试过的位置重复。 - `print`函数用于输出最终的解决方案。 #### 深入分析: 在`my_...
使用回溯来解决八皇后问题。 请参见《心希盼说明-queen》
八皇后问题 Eight Queen's Problem八皇后问题演示系统
在Java中,我们可以创建一个棋盘类(Chessboard)来存储棋盘的状态,以及一个皇后类(Queen)来表示每个皇后的位置。同时,我们还需要一个主程序类(如NQueenSolver)来驱动整个解题过程。 在描述中提到,程序目前...
八皇后问题是一个经典的计算机编程问题,源自于19世纪由数学家鲁道夫·费迪南德·莱昂哈德·欧拉提出,其目标是在一个8x8的棋盘上放置八个皇后,使得任何两个皇后都无法在同一行、同一列或同一对角线上互相攻击。...
在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"发现很少有关于C#的算法,这是最近写的一个八皇后的算法我写了很详细的注解。
八皇后问题是一个经典的回溯算法问题,源自19世纪的数学家欧拉提出,旨在在8×8的棋盘上放置8个皇后,使得任意两个皇后都无法通过直线互相攻击,即任意一行、一列或对角线上都不能有多个皇后。这个问题具有很高的...
采用随机算法解决,算是比较新的非经典算法。
皇后问题:输入皇后个数,找到所有满足条件的路径
在一个N×N的国际象棋棋盘中摆N个皇后,使这N个皇后不能互相被对方吃掉。 N皇后算法源码
C语言写的八皇后问题,挺简洁的,请大家多多指教了
在“Nqueen.rar”这个压缩包中,我们很可能是得到了一个用Visual C编写的程序,用于演示如何解决N皇后问题。Visual C是一种流行的面向对象的编程语言,它提供了丰富的库函数和高效的性能,适合开发这样的算法实现。 ...
八皇后问题是一个经典的问题,在棋盘上放置八个皇后,使得任意两个皇后都无法在同一行、同一列或同一条对角线上,从而找到所有可能的摆放方案。这个问题在计算机科学中常被用来作为解决约束满足问题的实例,同时也...
八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。...
八皇后问题盲目搜索法,智能控制课程设计2018。
收集的用scheme语言编写的八皇后的解法,对学习scheme语言想理解递归的同志们是一个好例子,sicp中也有此练习题。
八皇后问题,作为一个经典的问题,其挑战在于在8×8的棋盘上摆放8个皇后,使得任何两个皇后都不能在同一行、同一列或同一对角线上。这个问题在计算机科学中常常被用作教学示例,因为它涉及到搜索算法和回溯策略。本...
解决八皇后问题。从第一行开始,放第一个皇后,放好皇后以后,她...并给8个皇后编号。 void initChessboard(); //回溯求八皇后问题的所有解,皇后协调算法 void queenCoordinate(); //输出所有解 void printResult();
8皇后问题复杂性描述,输入一定方格个数,即可输出最好的排列方式。