回溯算法的模型是 x++, not satisfy ? x-- : continue.

代码中x作列号,y[x]保存第x列上皇后放置的位置。

 1 #include<stdio.h>
 2 #include<math.h>
 3 #define N 5
 4 int position_check(int,int*);
 5 void print_board(int count,int* y);
 6 int main()
 7 {
 8     int y[N]= {0}; //记录每列上的皇后放的位置
 9     int count = 0; //解的个数
10     int x = 1;
11     while(x>0)
12     {
13         y[x]++;      //为当前x位置找一个皇后的位置
14         while((y[x]<=N) && !position_check(x,y))
15             y[x]++; //找到合适的皇后
16         //
17         if(y[x]<=N)//找到一个可以放置第x个皇后的位置,到该步为止,所求部分解都满足要求
18         {
19             if(x==N)//找到一个完整的放置方案
20             {
21                 count++;
22                 printf("%d\n",count);
23                 for( int i=1; i<=N; i ++ )
24                 {
25                     for( int j=1; j<=N; j++ )
26                         if( j==y[i] ) printf("x ");//如果该位置放了皇后则显示x
27                         else printf("o ");
28                     printf("\n");
29                 }
30             }
31             else
32                 x++; //继续寻找下一个皇后的位置,还没找到完整解决方案
33         }
34         else//未找到可以放置第x个皇后的位置,到该步为止,已经知道不满足要求
35         {
36             y[x] = 0;//因为要回溯,下一次是寻找第x-1个皇后的位置,
37             //在下一次确定x-1的位置之后,第x个皇后的开始搜索的位置要重置
38             x--; //回溯
39         }
40     }
41 }
42 int position_check(int k,int* y) //测试合法性
43 {
44     for(int j = 1; j < k; j++)
45         if((abs(k-j) == abs(y[j] - y[k]))||(y[j] == y[k]))
46             return 0;
47     return 1;
48 }

View Code

看了唐大仕老师的8皇后改的,基本是复制粘贴 ( ╯□╰ )

转载于:https://www.cnblogs.com/oyummy/p/4541994.html

C语言回溯算法解决N皇后问题相关推荐

  1. 回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案

    回溯算法解决八皇后 4-皇后问题 (4 - Queen's problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 ...

  2. 回溯算法解决八皇后问题(JAVA实现)

    送给程序猿们一句话 <拥有水滴石穿的坚持:懂得聚沙成塔的积累:磨练坚韧不拔的意志:学习脚踏实地的奋斗:提升立世做人的技巧:突破自我设限的障碍.> 文章目录 背景 问题解决 思路 什么是回溯 ...

  3. 用递归思想和回溯算法解决八皇后问题(java实现)

    八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...

  4. 回溯 皇后 算法笔记_回溯算法:N皇后问题

    给「代码随想录」一个星标吧! ❝ 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便 ...

  5. 回溯法解决n皇后问题

    回溯法解决n皇后问题 题目要求: 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后, ...

  6. Java实现递归回溯,解决八皇后问题,数据结构与算法

    文章目录 八皇后问题 解决思路 代码实现 运行结果 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆 ...

  7. 回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)

    问题:0/1背包问题 例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量.背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1 ...

  8. c语言 用回溯算法解决01背包问题,回溯法解决01背包问题

    <回溯法解决01背包问题>由会员分享,可在线阅读,更多相关<回溯法解决01背包问题(21页珍藏版)>请在人人文库网上搜索. 1.回溯法解决01背包问题,回溯法解决01背包问题, ...

  9. LeetCode回溯算法——51.N皇后问题详解

    51.N皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整 ...

最新文章

  1. J2SE基础夯实系列之数组
  2. 为了控制Bean的加载我使出了这些杀手锏
  3. php 删除硬链接,RHCE系列之文件管理----硬链接和软链接
  4. LISP 图层前后缀_lisp获取qleader端点_lisp以一个图层来做定义快名称怎么实现
  5. maskrcnn用于目标检测_用于目标检测的池化渐进网络(Pooling Pyramid Network)
  6. Java后端:Linux的基本使用学习笔记
  7. java.lang.NoSuchMethodError
  8. 使用SQL Server 发送邮件
  9. Ajax入门(创建 XMLHttpRequest 对象)
  10. ssl1463-公共子串【各种dp之1】
  11. mysql简单聚合函数根据条件单表查询
  12. insertSelective 和 insert 的区别
  13. mini2440驱动分析之触摸屏
  14. [HEOI2013]ALO(待更)
  15. 怎么实现多用户同时远程连接到一台电脑上
  16. 2020软件测试面试题汇总,看完BATJ面试官对你微微一笑!(内含答案)
  17. 如何搭建一套业务、数据一体化的数据指标体系
  18. 斐波那契数列的几种求解方法
  19. MATLAB符号变量的创建和简单运算
  20. 北京高级软件需求分析师培训招生!

热门文章

  1. cisco PIX防火墙的配置及注解完全手册
  2. modifiers在JAVA中_Java Modifier.classModifiers方法代碼示例
  3. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...
  4. 多伦多到温莎_我想要freeCodeCamp Toronto的Twitter来发布报价,所以我做了一个免费的bot来做到这一点。...
  5. php转换文字Unicode,php实现将中文转为unicode的方法
  6. 学生教育云平台登录入口_湖南省教育云平台登录入口
  7. c语言怎么创建一个h文件,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件...
  8. win使用linux共享打印机,Ubuntu 12.04以及 Window 下使用共享打印机
  9. 哪些人适合学习web前端?
  10. 语句覆盖(Statement coverage)