回溯法--n皇后问题

这篇博客探讨了使用回溯法解决n皇后问题的时间复杂度和空间复杂度。在最坏情况下,时间复杂度为O(n*n+1次方),空间复杂度为O(n)。文章还提出了算法优化策略,通过增加显约束(不同行和不同列)来显著缩小解空间,以提高效率。


package com.duoduo.day316;
/**
 * 一山不容二虎(n皇后问题)
 * 问题描述:  在n*n的棋盘上放置彼此不受攻击的n个皇后,按照规则,皇后可以攻击与之在同行同列同斜线的棋子。故如何放置?
 * 问题转化:  以行为主导(每行放置一个则不可能同行)--->在第n行放置第n个皇后,第n个皇后的位置不能与前n-1个皇后同列,同斜线
 * 算法设计:  1 定义问题的解空间:{x1,x2...xn} 分量xi表示第i个皇后放置在第i行第xi列 ,xi=1,2...n 
 * 			 2 解空间的组织结构:  一棵m(m=n)叉树   树的深度为n    (n*n)
 * 			 3 搜索解空间    约束条件--->在第t行放置第t个皇后时,第t个皇后的位置不能和前t-1个皇后同列,同斜线 
 * 						   即   xi!=xj不同列  |i-j|!=|xi-xj|  不同斜线
 *                                      限界条件---->不存在方案好坏的情况---->无需设置
 *           4 搜索过程  写代码
 *           
 * @author 多多
 *
 */
import java.util.Scanner;
import java.math.*;

public class Test5_5 {
	static int M=105;        				//定义默认数组大小
	static int n;            				//表示n个皇后
	static int [] x=new int[M];         	                //x[i]表示第i个皇后放置在第i行第x[i]列
	static int countn;                  	 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值