八皇后问题
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);
}
}