题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553
中文题目,题意很简单。
思路:听说这是学习递归的经典题目,就来试试,发现自己一点想法都没有,一遇到递归,就懵逼。于是看了别人的代码,自己一步一步的看了几遍,然后自己又敲了一遍。对回溯递归有了新的认识。
由题意可知,每一行有且仅有一颗棋子,curRow代表当前将要下棋的行数。下棋是一行一行的遍历,下完,再遍历下一行,每次下棋都要看是否符合题意:1,不能与其他棋子同行或同列,不能和其他棋子是对角线。所以就要对以及下棋的0到curRow-1行与第curRow行棋子比较。左对角线(行数-列数相等),右对角线(行数+列数相等)。
EG:n=3

先是黑笔->铅笔->蓝笔

#include<stdio.h>
int row[11],count,N;//全局变量,不用单独传值 void search(int curRow)
{
int i,j;
if(curRow==N)
count++;
else
for(i=0;i<N;i++)
{
row[curRow]=i;
int ok=1;//找到符合题意的一局棋。
for(j=0;j<curRow;j++)
if(row[curRow]==row[j]||curRow-row[curRow]==j-row[j]||curRow+row[curRow]==j+row[j])
{
ok=0;
break;
}//一旦if条件成立,舍弃当前棋子,然后先在同一行中,选择下一列,如果同一行
//每一列都不符合题意,那么回溯。
if(ok)
search(curRow+1);//遍历下一行
}
} int main()
{
int num[11];//从1开始记数,题意是1开始的。
for(int i=1;i<=10;i++)
{
N=i;
search(0);
num[i]=count;
count=0;
}
while(scanf("%d",&N)!=EOF&&N)
printf("%d\n",num[N]);
}

2553 ACM N皇后 回溯递归的更多相关文章

  1. #C++初学记录(N皇后#回溯递归)

    <font size=5 face"微软雅黑">N皇后Problem Description <font size=4 face"微软雅黑"& ...

  2. YTU 3013: 皇后问题(递归)

    3013: 皇后问题(递归) 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 ...

  3. 2n皇后 - 回溯

    题目地址:http://www.51cpc.com/web/problem.php?id=1172 Summarize: 1. 递归回溯: 2. 先扫完一种皇后,再扫描另一种: 3. 循环输入: 4. ...

  4. 再谈循环&迭代&回溯&递归&递推这些基本概念

    循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...

  5. N皇后问题--递归回溯

    著名的N皇后问题,就是先按照行一行一行的找,先找第一行,第一行找到一列能满足条件,继续找下一行,如果下一行也找到一列能满足条件,继续找下一行,一次类推,最终找到解, 但是,如果找不到的话, 就说明上一 ...

  6. java实现八皇后问题(递归和循环两种方式)

    循环方式: package EightQueens;   public class EightQueensNotRecursive { private static final boolean AVA ...

  7. js实现八皇后,回溯法

    八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...

  8. 8皇后-----回溯法C++编程练习

    /* * 八皇后问题回溯法编程练习 * 在8×8的棋盘上,放置8个皇后,两个皇后之间不能两两攻击 * 也即,直线,垂直45度.135度方向不能出现两个皇后 * * copyright Michael ...

  9. N皇后问题——递归求解

    比较简单,废话不说,上代码: public class NQueen { //比如:position[1]=3,表示第一行的第三列有一个皇后 private int [] position; //总的 ...

随机推荐

  1. AT91RM9200---电源管理控制器(PMC)介绍

    1.前言 PMC通过集成的两个OSC(一个主振荡器和一个慢时钟振荡器32.768khz)和两个PLLs产生系统所有的clock. PMC提供时钟给嵌入式处理器,并通过在IDLE模式下停止处理器时钟,直 ...

  2. 程序执行的过程分析--【sky原创】

    程序执行的过程:     比如我们要执行3 + 2   程序计数器(PC) = 指令地址 指令寄存器(IR) = 正在执行的命令 累加器(AC) = 临时存储体   那么实际上执行了三条指令 每条指令 ...

  3. oracle查看表名称和表字段注释

    --查询该表字段的注释select * from user_col_comments where Table_Name like '%SMS%' --查询类似表select * from user_t ...

  4. crontab在/var/log/目录下没有cron.log文件

    1.修改rsyslog文件: /etc/rsyslog.d/50-default.conf 将  rsyslog  文件中的  #cron.*  前的  #  删掉: 2.重启rsyslog服务: s ...

  5. bootgrid修改成可以全勾选和全取消勾选操作

    1. 引言 由于项目需要,需要在不同页面上选择全勾选能全部勾选所有的记录,反勾选也如此.这个需求可以解决了一个样例:如果有150条记录,当前页就10条,你又在每一个页面勾选部分的记录,然后,如果你要全 ...

  6. PYTHON-组合 封装 多态 property装饰器

    # 组合'''软件重用的重要方式除了继承之外还有另外一种方式,即:组合组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之 ...

  7. tsconfig.json配置

    什么工具看什么官网-一般都会有说明的 https://www.tslang.cn/docs/handbook/tsconfig-json.html 概述 如果一个目录下存在一个tsconfig.jso ...

  8. VS Code 折腾记 - (6) 基本配置/快捷键定义/代码片段的录入(snippet)

    前言 本来分成三篇来写的,但是想了想没必要,大家都是聪明人...简单的东西点一下就晓得了. 基本配置 快捷键自定义(Ctrl+K Ctrl + S) 那个when支持条件表达式返回一个布尔值 支持的快 ...

  9. 你可能不知道的git clean

    git clean是干啥的? git clean可以帮你清理workspace中未被git版本控制的文件,比如临时文件,构建出来的二进制文件. 使用方法 如果你的clean.requireForce项 ...

  10. 云平台Linux主机安装流程

    ==一.安装包===================================================================================如果是1+2主机安装 ...