package Leetcode;
public class placeQueens {
public static void main(String[] args) {
new placeQueens().placeQueens(8);
}
/*
数组索引是行号,数组元素是列号
*/
int[] cols;
//多少种方法
int ways;
void placeQueens(int n){
if (n<1) return;
cols = new int[n];
place(0);
System.out.println(n+"皇后一共有"+ways+"种摆法");
show();
}
/**
* 从第row行开始摆放皇后
* @param row
*/
void place(int row){
if (row == cols.length){
ways++;
return;
}
for (int col=0;col<cols.length;col++){
if (isValid(row,col)){
//在第row行,第col列摆放皇后
cols[row] = col;
place(row+1);
}
}
}
/**
* 判断第row行 第col列是否可以摆放皇后
*/
boolean isValid(int row,int col){
for (int i =0;i<row;i++){
//第col列有皇后
if (cols[i] == col ){
return false;
}
//斜线上是否有皇后 (斜率)
if (row - i == Math.abs(col - cols[i])){
return false;
}
}
return true;
}
void show(){
for (int row = 0;row<cols.length;row++){
for(int col = 0;col<cols.length;col++){
if (cols[row] == col){
System.out.print("1 ");
}else {
System.out.print("0 ");
}
}
System.out.println();
}
}
}
N皇后
最新推荐文章于 2025-08-01 12:00:00 发布
该博客展示了如何用Java实现八皇后问题的解决方案,通过一个名为`placeQueens`的类,利用回溯法找出所有可能的摆放方式。核心方法`place`递归地尝试在棋盘的不同行放置皇后,并通过`isValid`方法检查当前位置是否合法。最终,程序会输出总共有多少种摆放方法,并展示每种摆放的具体位置。
986

被折叠的 条评论
为什么被折叠?



