package com.zeph.eightqueens;
public class NQueensPuzzle {
private int noOfSolutions;
private int noOfQueesns;
private int[] queensInRows;
public NQueensPuzzle() {
noOfQueesns = 8;// 皇后个数
queensInRows = new int[8];// 表示第k行的第k个皇后放在第k行的第几列
noOfSolutions = 0;// 解决方案个数
}
public NQueensPuzzle(int queens) {
noOfQueesns = queens;
queensInRows = new int[noOfQueesns];
noOfSolutions = 0;
}
/**
* 判断是否可以放置
*
* @param i
* 第i列
* @param k
* 第k行
* @return
*/
public boolean canPlaceQueen(int i, int k) {
for (int j = 0; j < k; j++)
if ((queensInRows[j] == i)// 在同一列上或者是同一个对角线上
|| Math.abs(queensInRows[j] - i) == Math.abs(j - k))
return false;
return true;
}
/**
* 递归得到所有的结果
*
* @param k
*/
public void queensConfiguration(int k) {
for (int i = 0; i < noOfQueesns; i++) {
if (canPlaceQueen(i, k)) {
queensInRows[k] = i;
if (k == noOfQueesns - 1) {
printConfigration();
} else {
queensConfiguration(k + 1);
}
}
}
}
public void printConfigration() {
noOfSolutions++;
for (int i = 0; i < noOfQueesns - 1; i++) {
System.out.print(queensInRows[i]);
}
System.out.println("");
}
public int getNoOfSolutions() {
return noOfSolutions;
}
public static void main(String[] args) {
NQueensPuzzle puzzle = new NQueensPuzzle();
puzzle.queensConfiguration(0);
System.out.println(puzzle.getNoOfSolutions());
}
}
8-皇后 Java
最新推荐文章于 2023-12-11 10:44:42 发布