问题说明:
西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上?
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);
}
}
分享到:
相关推荐
使用回溯来解决八皇后问题。 请参见《心希盼说明-queen》
八皇后问题 Eight Queen's Problem八皇后问题演示系统
在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"发现很少有关于C#的算法,这是最近写的一个八皇后的算法我写了很详细的注解。
采用随机算法解决,算是比较新的非经典算法。
皇后问题:输入皇后个数,找到所有满足条件的路径
在一个N×N的国际象棋棋盘中摆N个皇后,使这N个皇后不能互相被对方吃掉。 N皇后算法源码
C语言写的八皇后问题,挺简洁的,请大家多多指教了
八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。...
一个效率一般的用回溯算法解决的八皇后问题
八皇后问题盲目搜索法,智能控制课程设计2018。
收集的用scheme语言编写的八皇后的解法,对学习scheme语言想理解递归的同志们是一个好例子,sicp中也有此练习题。
解决八皇后问题。从第一行开始,放第一个皇后,放好皇后以后,她...并给8个皇后编号。 void initChessboard(); //回溯求八皇后问题的所有解,皇后协调算法 void queenCoordinate(); //输出所有解 void printResult();
8皇后问题复杂性描述,输入一定方格个数,即可输出最好的排列方式。
二、 算法思想: 采用回溯法解决八皇后问题。...并给8个皇后编号。 void initChessboard(); //回溯求八皇后问题的所有解,皇后协调算法 void queenCoordinate(); //输出所有解 void printResult();
他的问题是,在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行,同一列,同一斜线上。 实验内容:利用所学的栈结构用递归或非递归解决八皇后问题。 2. 程序分析 程序使用程序最主要只是...
八皇后问题, 可直观输出结果 包含算法流程文档 参考博客:http://blog.csdn.net/shuilan0066/article/details/7703363
采取的是C++编程,小游戏制作。玩法:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
八皇后算法
java和c++都有,算法为回溯。n后问题 注:i-j=k-l 或 i+j=k+l 说明2个皇后在对角线上
N皇后问题,可以设置皇后个数,很简单的实现,适合初学者学习。