N皇后问题(递归)
//八皇后递归解法 //#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皇后问题(递归)的更多相关文章
- YTU 3013: 皇后问题(递归)
3013: 皇后问题(递归) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 ...
- java实现八皇后问题(递归和循环两种方式)
循环方式: package EightQueens; public class EightQueensNotRecursive { private static final boolean AVA ...
- N皇后问题——递归求解
比较简单,废话不说,上代码: public class NQueen { //比如:position[1]=3,表示第一行的第三列有一个皇后 private int [] position; //总的 ...
- 八皇后问题 递归实现 C语言 超详细 思路 基础
八皇后问题 :假设 將八个皇后放到国际象棋盘上,使其两两之间无法相互攻击.共有几种摆法? 基础知识: 国际象棋里,棋盘为8X8格. 皇后每步可以沿直线.斜线 走任意格. 思路: 1.想把8个皇后放进去 ...
- 八皇后非递归(仅使用一个数组且可扩展为N皇后问题)
</pre><pre name="code" class="cpp">/* Theme:八皇后(非递归) Coder:秒针的声音 Tim ...
- #C++初学记录(N皇后#回溯递归)
<font size=5 face"微软雅黑">N皇后Problem Description <font size=4 face"微软雅黑"& ...
- 2n皇后问题-------递归 暴力求解题与分布讨论题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- 八皇后问题 --- 递归解法 --- java代码
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后 ...
- N皇后问题--递归回溯
著名的N皇后问题,就是先按照行一行一行的找,先找第一行,第一行找到一列能满足条件,继续找下一行,如果下一行也找到一列能满足条件,继续找下一行,一次类推,最终找到解, 但是,如果找不到的话, 就说明上一 ...
- 2553 ACM N皇后 回溯递归
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553 中文题目,题意很简单. 思路:听说这是学习递归的经典题目,就来试试,发现自己一点想法都没有,一遇到递 ...
随机推荐
- java-webuploader+Java如何实现分片+断点续传
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- web下载文件夹
1.文件下载有两种方式:一种是超链接,一种是Servlet提供下载. 2.超链接下载时:当文件可以在网页直接打开时,会直接打开文件,而不是下载,当文件打开不了时,会提供下载窗口. 3.超链接下载原理 ...
- 【模板】【数论】二次剩余Cipolla算法,离散对数BSGS 算法
Cipolla LL ksm(LL k,LL n) { LL s=1; for(;n;n>>=1,k=k*k%mo) if(n&1) s=s*k%mo; return s; } n ...
- bootstrap editable初始化后表单可修改数据
function loadData() { var url = "${ctx }/sys/marketing/product/page"; $('#tablepager').boo ...
- Java并发编程的艺术笔记(三)——Thread.join()
t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒.并不影响同一时刻处在运行状态的其他线程.它能够使得t.join()中的t优先执行,当t执行完后才会执行其他线程.能够使得线程 ...
- node.js npm 操作 模块化开发 cnpm镜像安装
模块(包) 传统引入 js 的缺点 整个网页,我们写了一个 js 文件,所有的特效都在里面 耦合度太高,代码之间关联性太强,不便于后期维护 变量容易 全局污染 如果将 复杂的 js 文件,拆成多个功能 ...
- expression,statement,definition ,identifier(symbol) ,literal(字面量) 术语
expression: an expression evaluates to a value only statement: a statement containing executable cod ...
- 开发一个Flink应用
步骤列表本次实战经历以下步骤: 创建应用:编码:构建:提交任务到Flink,验证功能: 环境信息Flink:1.7:Flink所在机器的操作系统:CentOS Linux release 7.5.18 ...
- 阶段3 1.Mybatis_09.Mybatis的多表操作_1 mybatis表之间关系分析
4.mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单 ...
- between()函数
1 between函数返回一个布尔量,即如果在该范围内,返回True,否则返回False. 注意between()中括号内是左闭右闭区间 在dataframe中常可用来通过选择某一列元素的范围来选择另 ...