递归的基本概念

一个函数调用其自身,就是递归

递归的作用

1) 替代多重循环

2) 解决本来就是用递归形式定义的问题

3) 将问题分解为规模更小的子问题进行求解

一行只能有一个皇后,这个根据游戏规则中的皇后的势力就可以得知。

首先先让A皇后放在左上角(0,0),B皇后再从第二行找到合适的位置,以此类推C皇后在第三行找到合适的位置,一直到N皇后,一组解就出来了,但是问题并不是这么简单。

假设现在是4皇后问题,第A个皇后在(0,0)B皇后在(1,3)

C皇后在(3,1)此时D皇后就无位置可以放置。

细心的你,可能会有疑问,每次D皇后,找不到合适的位置,就去让BC重新寻找位置,当BC皇后在它所处的行,再也找不到合适的位置,A皇后的位置就需要变动了。棋盘上就一个皇后A,寻找他的合适位置只需右移一个位置即可。A皇后位移后,再去为BC皇后找合适位置,如果有合适位置,就再去为D皇后寻找合适的位置;如果BC皇后都没有合适的位置,就需要再次右移A皇后,循环上面的过程。

#include<bits/stdc++.h>
using namespace std;
int N;
int queenPos[100];
/*用来存放算好的皇后位置。最左上角是(0,0)
每一行都有一个只用记录它的列坐标*/
void NQueen(int k);
int main()
{
cin >> N;
NQueen(0); //从第0行开始摆皇后
return 0;
}
void NQueen(int k)
{ //在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
int i;
if(k==N)
{ // N 个皇后已经摆好
for(i=0;i<N;i++)
cout<<queenPos[i]+1<<" ";
cout<<endl;
return ;
}
for(i=0;i<N;i++)
{ //逐尝试第k个皇后的位置
int j;
for( j = 0; j < k; j ++ )
{//和已经摆好的k 个皇后的位置比较,看是否冲突
if(queenPos[j]==i||abs(queenPos[j]-i)==abs(k-j)) break;
//冲突,则试下一个位置
}
if( j == k )
{ //当前选的位置i 不冲突
queenPos[k] = i; //将第k个皇后摆放在位置i
NQueen(k+1);
}
}
}

递归与N皇后问题的更多相关文章

  1. C#中八皇后问题的递归解法——N皇后

    百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...

  2. 递归实现N皇后问题

    其实是看到一位名为“活在二次元的伪触”的博主昨天还是前天写了篇这个题材的笔记,觉得有点意思,于是想自己来写写. 其实我发现上述那位同学写N皇后问题写得还不错,文末也会给出这位同学用通过递归的方法实现N ...

  3. java递归求八皇后问题解法

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

  4. 用递归求n皇后问题

    此问题是指在n*n的国际象棋棋盘上 ,放置n个皇后,使得这n个皇后均不在,同一行,同一列,同一对角线上,求出合法的方案的数目. 本题可以简单转化为就是求n的全排列中的数放在棋盘上使得这几组数,符合均不 ...

  5. 栈(stack)、递归(八皇后问题)、排序算法分类,时间和空间复杂度简介

    一.栈的介绍: 1)栈的英文为(stack)2)栈是一个先入后出(FILO-First In Last Out)的有序列表.3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的 ...

  6. 算法篇【递归2 -- N皇后问题】

    问题:输入整数N,要求在N*N的棋盘上,互相不能攻击,不在同一行同一列上,切不在对角线上,输出全部方案. 输入: 4 输出: 2  4  1  3 3  1  4  2 思路: 假设在前k-1个摆好的 ...

  7. 递归-N皇后问题

    // // #include <stdio.h> /*可以用回溯,但是我已经不太熟悉回溯了!!!!!!!!呜呜呜 * */ #include <iostream> #inclu ...

  8. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...

  9. N皇后问题(递归)

    //八皇后递归解法 //#include<iostream> //using namespace std; #include<stdio.h> ] = {-,-,-,-,-,- ...

随机推荐

  1. 【高并发】你知道吗?大家都在使用Redisson实现分布式锁了!!

    写在前面 忘记之前在哪个群里有朋友在问:有出分布式锁的文章吗-@冰河?我的回答是:这周会有,也是[高并发]专题的.想了想,还是先发一个如何使用Redisson实现分布式锁的文章吧?为啥?因为使用Red ...

  2. 初识docker与理解

    因最近公司的一个新项目,有一个业务场景是需要给多个甲方的服务器配置运行环境与部署,所以考虑使用docker来实现环境配置的统一 1.docker是什么 docker是一种容器虚拟化技术的实现,相当于在 ...

  3. go 锁和sync包

    一.什么是锁? sync.Mutex 是一个互斥锁,它的作用是守护在临界区入口来确保同一时间只能有一个线程进入临界区 在 sync 包中还有一个 RWMutex 锁:他能通过 RLock() 来允许同 ...

  4. java京东自动登录

    大部分代码都是参考的这边,我只是在他的逻辑上实现了自动通过验证码,放上主逻辑的代码吧,图片识别我用的若快,可以去接其他平台 https://blog.csdn.net/u013232789/artic ...

  5. Python Requests-学习笔记(11)-请求与响应对象

    任何时候调用requests.*()你都在做两件主要的事情.其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源.其二,一旦 requests 得到一个从 服务器返 ...

  6. 刨根问底系列(2)——stdin、stdout、FILE结构体、缓冲区和fflush的理解

    stdin.stdout.FILE结构体.缓冲区和fflush理解 因为之前调试代码时, printf输出的字符串总是被截断了输出(先输出部分, 再输出剩余的), 当时调试了很久, 才知道问题所在, ...

  7. IO流学习总结

    IO: 概述: IO流用来处理设备之间的数据传输,如上传文件和下载文件 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中按照数据流向: 输入流 读入数据 从操作系统上读入文件到 ...

  8. stand up meeting 12-9

    今天项目小组本已约好在今天下午四点半进行今天的daily scrum: 但是在四点半的时候,天赋和士杰同学均因组内项目会议延时,导致今天的daily scrum只能在晚上进行,但静雯同学因身体不舒服无 ...

  9. Oracle计算数值型的幂次方——POWER()

    Oracle计算数值型的幂次方 简介:幂次方就是幂函数的变形,在POWER(value1,value2)中,value1就是函数的底数,value2就是函数的指数.如:POWER(value1,val ...

  10. 使用dynamic和MEF实现轻量级的AOP组件 (2)

    转摘 https://www.cnblogs.com/niceWk/archive/2010/07/21/1782092.html 偷梁换柱 上一篇我们初试了DynamicAspect这把小刀,如果你 ...