/**
* @author cnkeysky
* @date 2020-02-22 11:47
*/
public class Queen8 {
private final int MAX = 8;
/**
* 下标作為行,值作為列
*/
private final int[] arr = new int[MAX];
public Queen8() {
}
/**
* 放置第 n 個皇後
* @param n int 代表行
*/
public void putQueen(int n) {
if (n == MAX) {
printArr();
return;
}
for (int i = 0; i < MAX; ++i) {
// 表示第 n 個皇後可以放在第幾列
arr[n] = i;
if (checkConflict(n)) {
putQueen(n + 1);
}
}
}
/**
* 檢測目前第 n 個皇後與 n - 1 個之前的皇後是否沖突
* @param n 目前第 n 個皇後
* @return boolean
*/
public boolean checkConflict(int n) {
for (int i = 0; i < n; ++i) {
// arr[i] == arr[n] 檢測是否在同一列
// Math.abs(n - i) == Math.abs(arr[n] - arr[i]) 檢測是否在同一斜線
// 由于 n 是遞增的同一行無需檢測
if ((arr[i] == arr[n]) || Math.abs(n - i) == Math.abs(arr[n] - arr[i])) {
return false;
}
}
return true;
}
public void printArr() {
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
}
/**
* @author cnkeysky
*/
public class DemoTest {
public static void main(String[] args) {
Queen8 queen8 = new Queen8();
queen8.putQueen(0);
}
}