N皇后的回溯加递归调用实现

本文介绍了一种使用回溯法解决八皇后问题的Java实现方案。通过递归地放置皇后并检查冲突,最终找到所有可行的解决方案。文章展示了完整的代码示例及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package org.lfj.queen;


/**
 * 八皇后的解法
 *
 */
public class Queen {


/**
* 多少皇后
*/
private int queenSize;

/**
* 多少解法
*/
private int solutionSum = 0;

//存储第N行的皇后所在的第N列的位置
private int[] data;


public Queen(int queenSize) {
this.queenSize = queenSize;
//将a[0]不使用
this.data = new int[queenSize+1];
}

//回溯法计算N皇后
public void backTrack(int t){
//如果得到了结果就输出
if(t > queenSize){
solutionSum++;
for (int i = 1; i < data.length; i++) {
print(data[i]);
}
System.out.println("这是第"+solutionSum+"种解法!!");
}else{
for (int i = 1; i < queenSize+1; i++) {
data[t] = i;
if(matchRule(t)){
//通过递归调用查找下一个皇后位置
backTrack(t+1);
}
}
}
}


//判断是否符合N皇后规则
private boolean matchRule(int k){
for (int i = 1; i < k; i++) {
if(Math.abs(data[i]-data[k])==Math.abs(i-k) ||
data[i] == data[k]){
return false;
}
}
return true;
}


private void print(int c){
for (int i = 1; i < c; i++) {
System.out.print("* ");
}
System.out.print("q ");
for (int i = c; i < queenSize; i++) {
System.out.print("* ");
}
System.out.println("\n");
}

public static void main(String[] args) {
//print(1);
Queen queen = new Queen(20);
queen.backTrack(1);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值