四皇后问题

转载 2015年10月21日 14:47:01
#include<iostream>
#include<cstdlib>
#define N 5//
using namespace std;
void Print(int n, int array[]){
for (int j = 1; j <= n; j++)
cout<<array[j]<<" ";  //输出最终的棋盘布局,每个数组元素值表示各行棋盘所在的该列放置皇后 
cout<<endl<<endl;
}

bool isOk(int i, int array[]) { //检查当前棋盘布局是否合理
for (int k = i - 1; k >= 1; k--)
  if(array[i] == array[k] || abs(array[i] - array[k]) == i - k) return false;
return true;
}
void Trial(int i,int n, int array[]) { //进入本函数前,前i-1行已经放置了互不攻击的i-1个皇后
if(i > n) Print(n, array);  //如果i已经大于最大的行数了,那么说明布局完成,则打印结果
else {
  for(int j = 1; j <= n; j++) {
   array[i] = j; //在第i行第j列放置一个皇后
   if(isOk(i, array)) Trial(i+1,n, array); //当前布局合理,进行下一行的布局
   array[i] = 0;   //移走第i行第j列放置的皇后, 回溯。
  }
}
}
int main(void) {
int qipan[N] = {0}; //棋盘的初始状态,棋盘上无任何皇后
Trial(1, N, qipan); //摆放皇后 
return 0;
}<img src="https://img-blog.csdn.net/20151021144930440?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

四皇后问题采用回溯法,按照顺序往格子中放置皇后,每放入一个就进入判断是否合法,如果合法,则继续放置,若不合法则只能够后退一步,重新放置皇后的位置




C++回溯算法Demo:以4皇后问题为例

回溯算法实际上是构造一棵推理树,并由树的叶子节点反向输出历史步骤; 其中,树的构建过程较为复杂;一种简化的方法是使用链表表连接和构造各个节点的关系; 以4皇后问题为例,采用C++ vector容器——...
  • alaclp
  • alaclp
  • 2015-04-11 18:11:59
  • 1416

算法学习:回溯解决4皇后问题

回溯解4皇后问题说实话,到现在对于写代码我还是心里挺害怕的,总觉得自己不行。。。但是我也要坚持下去,没准儿以后就行了呢,哈哈 今天晚上在图书馆复习回溯,老师课件上面第一个就是4皇后问题,我就想...
  • zkyrjsxdm
  • zkyrjsxdm
  • 2015-12-18 23:29:20
  • 1028

四皇后问题(同理适用于n皇后问题)图片版

四皇后问题(同理适用于n皇后问题 图片版) 图片来源:《数据结构 C语言版》(严蔚敏 吴伟民 编著 )第151页...
  • u014134180
  • u014134180
  • 2016-10-24 21:39:14
  • 1025

回溯法解决N皇后问题(以四皇后为例)

以4皇后为例,其他的N皇后问题以此类推。所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子。在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度...
  • czhzasui
  • czhzasui
  • 2017-04-05 16:24:38
  • 1642

经典DFS之N皇后问题

N皇后问题
  • dtxm123
  • dtxm123
  • 2016-07-23 08:57:09
  • 2169

C++实现四皇后问题

  • 2015年02月15日 16:54
  • 1.74MB
  • 下载

四皇后问题的代码实现(java)

package hg; /***  * 求解四皇后问题(回溯法)  * @author user  *  */ public class hjk {  private int[][] s...
  • oracle1158
  • oracle1158
  • 2014-06-20 11:41:22
  • 698

回溯经典算法之四皇后问题

1.问题概述:在一个4*4的方格中住着四个皇后,他们之间都不友好,相邻就会打架,现在要进行查找能够满足:每行每列每个斜线都只有一个皇后,才能没有打架发生2.思路:这里需要这样进行查找,第一个皇后先在第...
  • qq_27905183
  • qq_27905183
  • 2017-03-21 19:33:22
  • 444

四皇后问题c语言描述

  • 2009年11月12日 10:11
  • 686B
  • 下载

回溯法——四皇后问题

#include #include #include using namespace std; template class Queen { public: void Input(void); ...
  • u014033518
  • u014033518
  • 2014-09-02 21:38:23
  • 417
收藏助手
不良信息举报
您举报文章:四皇后问题
举报原因:
原因补充:

(最多只允许输入30个字)