包含完整的源代码和文档用C++解决2N皇后问题
发布时间
阅读量:
阅读量
一、算法思想
首先分析一下 2N 皇后问题中的 N:
当N为偶数值时:仅需确定一个可行方案就可;而另一组可行方案可通过将现有方案在N×N矩阵的中线进行镜像变换来获得。由于N取偶数值,在此情况下不会有白黑皇后的位置重叠问题。
举个例子来说当N等于4的时候通过计算得到的一组可行解是{3,1,4,2}基于同样的方法变换得到另一组可行解{2,4,1,3}可以看出在结合这两组解之后就能满足题目的需求了
如果N是一个奇数:沿着中轴线的镜像对称策略不可行(必然会有某个皇后位于中轴线上)。那么我们转而探讨以中心点为中心的镜像策略。
需要注意的是,在计算过程中,如果出现存在关于中心点对称的皇后布局(即某一皇后位于中心位置),则该布局不符合要求,并需进行重求;直至所有皇后的布局均不与该布局呈镜像关系为止。此时另一组可行解可通过将当前布局关于中心点取反来获得
比如当N等于5时
观察结果表明,在大多数情况下,并不需要对N皇后问题进行二次求解;相反地,只需找到一个可行的解决方案即可。
那么我们就可以期望接下来的事情变得容易处理。只需利用目标算法得到N皇后问题的一个符合条件的解就可以了。
爬山算法是局部搜索算法的一种成员,并因此是一种用于解决最优化问题的启发式方法。在应用过程中, 爬山算法遵循只探索与当前状态直接相邻的状态, 并仅选择比当前状态更具优势的价值状态这一原则。本质上说, 爬山算
全部评论 (0)
还没有任何评论哟~
