T1:用枚举法解决八皇后问题:在国际棋盘上放8个皇后,国际象棋棋盘共有八行八列,皇后可以吃掉与之同行同列以及同一对角线上的其他皇后。为让他们共存,请编写算法找出并且输出所有解的个数。
/**
* 1.用枚举法解决八皇后问题:
* 在国际棋盘上放8个皇后,国际象棋棋盘共有八行八列,皇后可以吃掉与之同行同列以及同一对角线上的其他皇后。
* 为让他们共存,请编写算法找出并且输出所有解的个数。
*/
public class T1 {
public static void main(String[] args) {
int n = 8;
Queen[] queens = new Queen[n];
placeQueens(0,queens);
}
public static void placeQueens(int row,Queen[] queens){
if (row == queens.length){ //所有皇后的位置都放完了
printQueens(queens);
return;
}
//放皇后是一行一行放,轮到第row行皇后,一列一列尝试
for (int col = 0;col < queens.length;col++){
boolean ifSafe = true;
//检查当前位置是否与已放置的皇后冲突
for (int i = 0;i < row;i++){//处于列或者同对角线(分为左对角线和右对角线)下一轮循环就不再考虑该列
if (col == queens[i].getColumn() ||