您的位置:首页 > 其它

八皇后问题

2018-03-01 04:59 218 查看

题目描述:

在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线(对角线)上,问有多少种摆法。

输入:

输出:

输出一个整数代表摆法的总数

思路

八皇后问题是典型的递归问题。
在一个8*8的棋盘上,皇后之间不能再同一行同一列和对角线上。
递归的实质就是把大的问题分解成小的来处理。
我们按行一行一行的排皇后位置
首先是第一行,排好后再排第二行(第一行已摆好,无需考虑之后的情况)。一直排下去
该排第八行时,前七行已经默认排好。因此递归完成

下面给出代码

public class Main {
static int count = 0;
static int queenPos[] = new int[8]; //八行皇后位置,每行的值就是该行皇后的位置
public static void EQueen(int k) {
if(k==8) {
// for(int i=0;i<8;i++) {
// System.out.print(queenPos[i]+1);
// }
// System.out.println();
count++;
return;
}

for(int i=0;i<8;i++) {
int j;
for(j=0;j<k;j++) {
if(queenPos[j] == i||Math.abs(queenPos[j]-i)==Math.abs(k-j)) { //冲突
break;
}
}
if(j == k) {
queenPos[k]=i;
EQueen(k+1);
}
}
}
public static void main(String[] args) {

EQueen(0);
System.out.println(count);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: