N皇后问题【递归求解】
n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案。
输入一个正整数N,则程序输出N皇后问题的全部摆法。
输出结果里的每一行都代表一种摆法。行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。
皇后的行、列编号都是从1开始算。
样例输入:
4
样例输出:
2 4 1 3
3 1 4 2 14
#include <iostream>
#include <cmath>
using namespace std; int N;
int queenPos[];//用来存放算好的皇后位置。最左上角是(0,0) void NQueen( int k); int main()
{
cin >> N;
NQueen(); //从第0行开始摆皇后
return ;
}
void NQueen( int k) //在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
{
int i;
if( k == N ) // N 个皇后已经摆好
{
for( i = ; i < N;i ++ )
cout << queenPos[i] + << " ";
cout << endl;
return ;
}
for( i = ;i < N;i ++ )//逐一尝试第k个皇后所在的列i.
{
int j;
for( j = ; j < k; j ++ )
{
//和已经摆好的 k个皇后的位置比较,看是否冲突
//queenPos[j] == i表示第j个皇后所在的列queenPos[j]与第k个皇后所在的列i相等
//abs(queenPos[j] - i) == abs(k-j)表示第k个皇后和第j个皇后在同一个斜线(行之差与列之差绝对值相等)
if( queenPos[j] == i || abs(queenPos[j] - i) == abs(k-j))
{
break; //冲突,则试下一个位置
}
}
if( j == k ) //当前选的位置 i 不冲突
{
queenPos[k] = i; //将第k个皇后摆放在第i列
NQueen(k+);
}
} //for( i = 0;i < N;i ++ )
}
N皇后问题【递归求解】的更多相关文章
- N皇后问题——递归求解
比较简单,废话不说,上代码: public class NQueen { //比如:position[1]=3,表示第一行的第三列有一个皇后 private int [] position; //总的 ...
- YTU 3013: 皇后问题(递归)
3013: 皇后问题(递归) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行 ...
- C++递归求解N个元素的所有子集
C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数, ...
- HDU 5694——BD String——————【递归求解】
BD String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- hdu 1588(矩阵好题+递归求解等比数列)
Gauss Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- java实现八皇后问题(递归和循环两种方式)
循环方式: package EightQueens; public class EightQueensNotRecursive { private static final boolean AVA ...
- 八皇后问题 递归实现 C语言 超详细 思路 基础
八皇后问题 :假设 將八个皇后放到国际象棋盘上,使其两两之间无法相互攻击.共有几种摆法? 基础知识: 国际象棋里,棋盘为8X8格. 皇后每步可以沿直线.斜线 走任意格. 思路: 1.想把8个皇后放进去 ...
- [LeetCode系列]N皇后问题递归解法 -- 位操作方式
N皇后问题: 给定8*8棋盘, 放置n个皇后, 使其互相不能攻击(即2个皇后不能放在同一行/列/正反对角线上), 求解共有多少种放置方式? 这个问题的解答网上有不少, 但是位操作解法的我看到的不多. ...
- LeetCode OJ Minimum Depth of Binary Tree 递归求解
题目URL:https://leetcode.com/problems/minimum-depth-of-binary-tree/ 111. Minimum Depth of Binary T ...
随机推荐
- 案例导入和导出Scott用户
ylbtech-Oracle:案例导入和导出Scott用户 导入和导出Scott用户 1. 导出Scott用户下的所有对象返回顶部 1.1, Microsoft Windows [版本 ] 版权所有 ...
- 4个设计绝招教你减少PCB板电磁干扰
电子设备的电子信号和处理器的频率不断提升,电子系统已是一个包含多种元器件和许多分系统的复杂设备.高密和高速会令系统的辐射加重,而低压和高灵敏度 会使系统的抗扰度降低. 因此,电磁干扰(EMI)实在是威 ...
- JavaScript-json数组排序
排序是开发中不可避免的,最近遇到一个需求需要将JSON数组排序,需求比较简单,实现起来也没什么难度,简单记录下过程: 首先我们需要明白的JavaScript本身的排序是可以传入函数比较的,数组排序如下 ...
- 快速书写常见的 Kotlin 代码 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 10款CSS3按钮 - 程序员再也不用为按钮设计而发愁了...
这次主要给大家分享10款风格各异的CSS3按钮,如果你希望你的页面也能有很炫的样式,那么我相信这10款CSS3按钮就非常适合你,而且每一款都整理了源代码供参考,一起来看看吧. 1.绚丽的CSS3发光按 ...
- 深入理解Javascript window对象
首先看我们的源代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- Tensorflow Serving 模型部署和服务
http://blog.csdn.net/wangjian1204/article/details/68928656 本文转载自:https://zhuanlan.zhihu.com/p/233614 ...
- linux bash关闭标准输出1(exec 1<&-)后重新打开
linux bash shell的再次学习. 文件描述符: stdin,stdout 和 stderr 的文件描述符分别是 0,1 和 2(一个文件描述符说白了就是文件系统为了跟踪这个打开的文件而分配 ...
- Mac OS X /home 目录权限修改
Mac OS X /home 目录权限修改 http://ju.outofmemory.cn/entry/283070 sudo vi /etc/auto_master # 注释掉 /home那一行 ...
- Java归去来第3集:Eclipse中给动态模块升级
一.前言 如果还不了解剧情,请返回第2集的剧情 Java归去来第2集:利用Eclipse创建Maven Web项目 二.开始升级动态模块 2.1:查看原来的版本 我们先来看看Ecli ...