java实现N皇后递归算法

这里是N皇后实现递归算法的java实现:


package NQueensDG;

import java.util.Scanner;

public class NQUEENSDIGUI {

	/** 
	 * @author YuYunTan(谭淇蔚)
	 * 
	 *N 皇后问题:
	 *在一个 N * N 的国际象棋棋盘中,
	 *怎样放置 N 个皇后才能使 N 个皇后之间不会互相有威胁而共同存在于棋局中,
	 *即在 N * N 个格子的棋盘中没有任何两个皇后是在同一行、同一列、同一斜线上。
	 *
	 *下面是递归的回溯法
	 *递归方法backtrack(1)实现对整个解空间的回溯搜索
	 *backtrack(i)搜索解空间中第i层子树。
	 *类NQUEENSDIGUI的数据成员记录解空间中的结点信息,以减少窗格backtrack的参数。sum记录可行解的 方案数
	 *
	 */
	//------------------------------------------------------------
	//下面是数据成员--------------------------------------------------
	static int n;//皇后个数
	static int []x;//当前解
	static long sum;
	
	//成员定义结束----------------------------------------------------
	
	NQUEENSDIGUI(int nn){
		n =nn;
		sum =0;
		x = new int [n+1];
		for(int i=0;i <= n ;i++)x[i]=0;//初始化都为0
		backtrack(1);
	}
	
	private void backtrack(int t) {
		// TODO 自动生成的方法存根
		if(t > n){
			sum++;
			print(x);
		}
		else
			for(int i=1;i<=n;i++){
				x[t]=i;
				if(place(t))backtrack(t+1);//递归调用,循环求解
			}
	}

	private void print(int[] x2) {
		// TODO 自动生成的方法存根
		System.out.println((x2.length-1)+"皇后的解为:");
		for(int i=1;i<=n;i++){
			System.out.print(" "+x2[i]);
		}
		System.out.println("");
	}

	private boolean place(int k) {
		// TODO 自动生成的方法存根
		for(int j=1;j < k;j++){
			if((Math.abs(k-j) == Math.abs(x[j]-x[k]))||(x[j] == x[k]))return false;
		}
		return true;
	}

	public static void main(String[] args) {
		int s;
		Scanner input = new Scanner(System.in);
		s = input.nextInt();
		NQUEENSDIGUI a = new NQUEENSDIGUI(s);
		System.out.println("---------------------------------");
		System.out.println("华丽丽的"+s+"皇后问题解");
		System.out.println(s+"皇后一共有"+sum+"个解!");
		input.close();
	}
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuYunTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值