四皇后问题

转载 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="http://img.blog.csdn.net/20151021144930440?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

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




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

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

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

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

n皇后2种解题思路与代码-Java与C++实现

本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进,使用了位运算。...
  • Evankaka
  • Evankaka
  • 2015年09月28日 08:37
  • 4258

用全排列方法解决N皇后问题(Leetcode 51)

有关全排列(Permutation)的思路和代码参见前一篇文章: http://blog.csdn.net/bcj296050240/article/details/51107056这里叙述一下N皇...
  • bcj296050240
  • bcj296050240
  • 2016年04月09日 21:13
  • 923

DFS解八皇后问题

仔细思考深度优先搜索其实可以分为大概四步. 1.发现,找到想要找的节点,如八皇后就是找到当前行放置皇后的那个点,马走日就是下一步的落点. 2.递进,如果不满足结束条件就继续递归,进入下一层.如八皇...
  • djd1234567
  • djd1234567
  • 2015年08月25日 00:41
  • 2075

回溯法解决N皇后问题(java实现)

回溯法解决N皇后问题(java实现)
  • qq_22222499
  • qq_22222499
  • 2017年04月30日 13:26
  • 568

递归回溯问题的四道经典题:N皇后,组合,全排列,二叉树路径和

组合和排列问题的实质是对N叉树的遍历,只是退出条件不同。1.组合描述:给出两个整数n和k,返回从1……n中选出的k个数的组合。 样例: 例如 n = 4 且 k = 2返回的解为:[[2,4],[...
  • lsf921016
  • lsf921016
  • 2017年04月08日 13:22
  • 297

理解使用递归及堆栈的算法处理八皇后问题

八皇后算法
  • lnnnd
  • lnnnd
  • 2016年05月26日 15:39
  • 3743

深入N皇后问题的一个高效算法的详解

深入N皇后问题的一个高效算法的详解 author: liuzhiwei N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行...
  • hunyxv
  • hunyxv
  • 2017年02月23日 18:30
  • 1065

华为OJ之N皇后问题(C++代码)

1问题描述 N皇后问题,就是如何将国际象棋中的N个皇后放在N*N的棋盘上而不会互相攻击,是一种通过枚举,再递归、回溯的思想。2思路 以8皇后问题为例,可知在8*8二维数组中,每个点用data[i]...
  • chenloxiaoea
  • chenloxiaoea
  • 2015年12月10日 10:46
  • 2413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四皇后问题
举报原因:
原因补充:

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