//八皇后递归解法

//#include<iostream>
//using namespace std;
#include<stdio.h> int queen[] = {-,-,-,-,-,-,-,-,-};
int count = ;//定义一个全局变量
int n;//(推广到n个皇后问题)
bool available(int pointi,int pointj) //判断某个皇后是否与已有皇后冲突
{
for(int i = ; i<pointi; i++)
{
if(pointj == queen[i])
return false;//同一列拒绝
if((pointi-i) == (pointj-queen[i]))
return false;//同一主对角线拒绝
if((pointi-i) + (pointj-queen[i]) == )
return false;//同一副对角线拒绝
}
return true;
}
void findSpace(int queenNumber) //在第queenNumber行找能放皇后的位置
{
//因为行数在递归中不断调用(即行数在递归一次取下一行),所以只要遍历列的位置
for(int i = ; i<n+; i++) //从1~8遍历这一行的八个空位
{
if(available(queenNumber,i))
{
//如果可以放这个位置就记录下第queenNumber个皇后的位置
queen[queenNumber] = i;
if(queenNumber == n) //如果八个皇后都放满了统计一下
{
count++;//次数就增加一次
return;
}
int nextNumber = queenNumber+;//还有皇后没放递归放下一个皇后(取下一行)
findSpace(nextNumber);//递归
}
}
queen[--queenNumber] = -;//如果这一行没有可放的位置说明上一行皇后放的位置不行,要为上一个皇后寻找新的可放位置(即就要重新再找一次)
return;
}
int main()
{
scanf ("%d",&n); //cin >> n ;
findSpace();//从(1,1)开始递归好理解
//cout << count << endl;
printf("%d\n",count);
return ;
}

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

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

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

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

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

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

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

  4. 八皇后问题 递归实现 C语言 超详细 思路 基础

    八皇后问题 :假设 將八个皇后放到国际象棋盘上,使其两两之间无法相互攻击.共有几种摆法? 基础知识: 国际象棋里,棋盘为8X8格. 皇后每步可以沿直线.斜线 走任意格. 思路: 1.想把8个皇后放进去 ...

  5. 八皇后非递归(仅使用一个数组且可扩展为N皇后问题)

    </pre><pre name="code" class="cpp">/* Theme:八皇后(非递归) Coder:秒针的声音 Tim ...

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

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

  7. 2n皇后问题-------递归 暴力求解题与分布讨论题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...

  8. 八皇后问题 --- 递归解法 --- java代码

    八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后 ...

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

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

  10. 2553 ACM N皇后 回溯递归

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553 中文题目,题意很简单. 思路:听说这是学习递归的经典题目,就来试试,发现自己一点想法都没有,一遇到递 ...

随机推荐

  1. 小样本学习Few-shot learning

    One-shot learning Zero-shot learning Multi-shot learning Sparse Fine-grained Fine-tune 背景:CVPR 2018收 ...

  2. Selenium 警告框处理

    警告框分三种类型: alert:显示带有一条指定消息和一个 OK 按钮的警告框. confirm:显示一个带有指定消息和 OK 及取消按钮的对话框. prompt:显示可提示用户进行输入的对话框. 我 ...

  3. 根据linux自带的JDK,配置JAVA_HOME目录

    在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos6.5是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java ...

  4. [LeetCode]-algorithms-Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  5. oracle 11g安装教程终结版

    1.解压文件 2.双击 “setup.exe” 3.高级安装.下一步 4.企业版  下一步 5.下一步 6.只要不报错,警告没事.(路径如果报错的话,没事,直接继续) 注意:如果有需要6.2版本的错误 ...

  6. IFG以太网帧间隙

    交换机的线速 描述交换机性能可以使用“线速”这个概念,那它是什么意思呢?所谓的线速是指经过交换机处理的理想状态下最大数据率.描述数据率可以用bps(bit per second)和mpps(milli ...

  7. 如何设置linux bash终端的字符显示内容和颜色?

    通常linux有1-6个字符终端 tty, 有1个图形终端. 通常用 ctrl+alt+f1 到f6是字符终端, ctrl+alt+f7为图形终端, 但是, 也有不一样的, 如: fedora的4.0 ...

  8. idea中git回退本地仓库版本

    场景:代码commit到本地仓库,还没有push到远程仓库,这时要回退代码. 介绍下Reset Head中三种Reset Type类型: 1.Mixed(默认):它回退到某个版本,本地会保留源码,回退 ...

  9. Jmeter之非GUI模式(命令行)执行

    在使用Jmeter进行性能测试时,建议使用非GUI模式执行. 命令行启动 1.进入jmeter安装的bin目录 2.执行Jmeter命令 如下: (1.jmeter.bat -n -t E:\apac ...

  10. HTML5——添加新元素 新元素 Canvas SVG MathML 黑客帝国特效

    为HTML添加新元素 添加新元素   +   该元素定义样式 <!DOCTYPE html> <html> <head> <meta charset=&quo ...