题目描述
将 n 个皇后放置在 n × n 的棋盘上,应该如何放置皇后的位置,保证皇后彼此之间不能相互攻击。
使用回溯算法计算n 皇后问题不同的解决方案的数量。
输入第一行为一个整数n,表示皇后的数量和棋盘的规模。
样例输入输出
样例1
输入:
1
输出:
1
样例2
输入:
4
输出:
2
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
static int sum = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] queen = new int[n];
BackTrack(n, 0, queen);
System.out.println(sum);
}
public static void BackTrack(int n, int row, int[] queen) {
if (row == n)
{
sum++;
return;
}
for (int col = 0; col < n; col++)
{
if(isValid(row, col, queen))
{
queen[row] = col;
BackTrack(n, row + 1, queen);
}
}
}
private static boolean isValid(int row, int col, int[] queen) {
for (int i = 0; i < row; i++)
if (queen[i] == col || Math.abs(queen[i] - col) == row - i)
return false;
return true;
}
}