n皇后问题

Time Limit: 1 Sec  Memory Limit: 64 MB  Special Judge
Submit: 12  Solved: 3
[Submit][Status][Web Board]

Description

在n×n 格的棋盘上放置彼此不受攻击的n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2 个皇后不放在同一行或同一列或同一斜线上。 设计一个解n 后问题的队列式分支限界法,计算在n× n个方格上放置彼此不受攻击的n个皇后的一个放置方案。

Input

输入数据只占一行,有1 个正整数n,4≤n≤20。

Output

将计算出的彼此不受攻击的n个皇后的一个放置方案输出。第1行是n个皇后的放置方案。

Sample Input

5

Sample Output

1 3 5 2 4

HINT

N皇后问题
解决这道问题有两种不同形式的做法:递归和迭代。

递归和迭代有什么区别呢?
现在引用百度知道的一个回答:

  1. 简单来说,递归就是自己调用自己,如:
  2. int abc(...)
  3. {
  4. if(...) //递归终止条件
  5. { return abc(...); }
  6. return ;
  7. }
  8.  
  9. 迭代是重复一组指令,不断地根据变量的旧值推出新值,如:
  10. for(; ; ;) //迭代终止条件
  11. {
  12. a = b + c;
  13. b = a;
  14. c = a;
  15. }

我想有一部分人也是分不清的吧,包括我自己也是,现在重温一下这两者的区别。
===================================
好了,刚才只是题外话,现在我们回归正题。
不管是递归还是迭代,实际上思路都是一样的。

解题思路:
  题目要求任意一横排、一竖列、一斜线上不能有两个皇后,那么我们以行i做一个循环

,每循环一次就确定第i个皇后在第几列。很显然第i个皇后的位置不能和之前(i-1)个皇后的位置重复

,也就是a[i]!=a[1]/a[2]/.../a[i-1],那么写一个递归函数f(i),确定第i个皇后的位置。

下面是我用递归做的代码:

  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int n;
  5. int a[];
  6. bool f(int h)
  7. {
  8. if(h>n)
  9. return true;
  10. if(h==){    //第一个皇后的位置不需要对比
  11. for(int i=;i<=n;i++){
  12. a[h]=i; if(f(h+))
  13. return true;
  14. }
  15. }
  16. else {  //从第二个皇后开始位置需要与前面的皇后对比了
  17. for(int i=;i<=n;i++){  //按行循环
  18. int j;
  19. for(j=;j<h;j++)  //判断是否一竖列有两个皇后
  20. if(a[j]==i)
  21. break;
  22. if(j<h)
  23. continue;
  24. for(j=;j<h;j++){  //判断是否一斜线上有两个皇后。因为是按行循环,所以不需要判断是否一横行上有两个皇后。
  25. int t=h-j;
  26. if(a[j]+t==i || a[j]-t==i)
  27. break;
  28. }
  29. if(j<h)
  30. continue;
  31. a[h]=i;
  32. if(f(h+))  //判断下一个皇后的位置。
  33. return true;
  34. }
  35. }
  36. return false;  //条件都不符合,则说明这种摆法不合适,回溯,换一种摆法。
  37. }
  38.  
  39. int main()
  40. {
  41. cin>>n;
  42. f();
  43. for(int i=;i<=n;i++)
  44. cout<<a[i]<<' ';
  45. return ;
  46. }

Freecode : www.cnblogs.com/yym2013

ytu 1789:n皇后问题(水题,枚举)的更多相关文章

  1. 洛谷P2038 无线网络发射器选址 水题 枚举

    刚开始边界写错了(将128写成127). 注意n <= 20,所以可以每读入一个点就将其周边更新,这样最多也只会有 40 * 40 * 20 种位置需要被枚举. Code: #include&l ...

  2. ytu 1939:统计元音(水题)

    统计元音 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 68  Solved: 33[Submit][Status][Web Board] Descrip ...

  3. ytu 1910:字符统计(水题)

    字符统计 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 421  Solved: 92[Submit][Status][Web Board] Descri ...

  4. poj1873 The Fortified Forest 凸包+枚举 水题

    /* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...

  5. hdu 2553:N皇后问题(DFS遍历,水题)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  7. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  8. ytu 1059: 判别该年份是否闰年(水题,宏定义)

    1059: 判别该年份是否闰年 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 222  Solved: 139[Submit][Status][Web ...

  9. ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)

    1064: 输入三个字符串,按由小到大的顺序输出 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 471  Solved: 188[Submit][Sta ...

随机推荐

  1. 旋转屏幕时,假如自定义的xib大小变了,可能是这个属性没有修改

    虽然xib内部启用了自动布局,但是当xib放入外界,xib自身的autoresizing是存在的

  2. iOS Application Life Cycle 应用程序生命周期

    应用程序的状态 IOS的应用程序一共有5种状态. Not running(未运行):程序未启动 Inactive(未激活):其他两个状态切换时出现的短暂状态.唯一在此状态停留时间比较长的情况是:当用户 ...

  3. NoClassDefFoundError:aspectj/weaver/reflect/ReflectionWorld$Reflection

    Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: ...

  4. 新浪微博客户端(5)-自定义UISearchBar

    iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //===================================== ...

  5. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  6. mysql查询在一张表不在另外一张表的记录

    mysql查询在一张表不在另外一张表的记录   问题:    查询一个表(tb1)的字段记录不在另一个表(tb2)中      条件:tb1的字段key的值不在tbl2表中      -------- ...

  7. 查看远程git log

    $ git reset --hard bit/add $ git log --oneline --graph

  8. 坚持不懈之linux haproxy 配置文件 详情

    ####################全局配置信息######################## #######参数是进程级的,通常和操作系统(OS)相关######### global maxc ...

  9. 【Python】Django Model 怎么使用 UUID 作为主键?

    >>> import uuidprint uuid.uuid3(uuid.uuid1(), 'python.org') >>> # make a UUID base ...

  10. jquery 常用类别选择器

    1.$('#showDiv'):  id选择器,相当于javascript中的documentgetElementById("showDiv"); 2.$("onecla ...