原题网址:https://www.lintcode.com/zh-cn/old/problem/n-queens-ii/

34. N皇后问题 II

 

讨论区

根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。

您在真实的面试中是否遇到过这个题?

Yes
样例

比如n=4,存在2种解决方案

标签

 
方法同N皇后问题,只不过不生成解决方案而是返回解决方法的个数。
 
1.递归
AC代码:
class Solution {
public:
/**
* @param n: The number of queens.
* @return: The total number of distinct solutions.
*/
bool canPlaceQ(int row,int col, int * position,int n)
{
for (int i=;i<row;i++)
{
if (position[i]==col||abs(row-i)==abs(col-position[i]))
{
return false;
}
}
return true;
} void placeQ(int &count,int row,int *position,int n)
{
if (row==n)
{
++count;
}
else
{
for (int j=;j<n;j++)
{
if (canPlaceQ(row,j,position,n))
{
position[row]=j;
placeQ(count,row+,position,n);
}
}
}
} int totalNQueens(int n)
{
int count=;
if (n<=)
{
return ;
}
int *position=new int[n];
for (int i=;i<n;i++)
{
position[i]=-;
}
int row=;
placeQ(count,row,position,n); return count;
}
};

2.非递归

AC代码:

class Solution {
public:
/**
* @param n: The number of queens.
* @return: The total number of distinct solutions.
*/
bool canPlaceQ(int row,int col, int * position,int n)
{
for (int i=;i<row;i++)
{
if (position[i]==col||abs(row-i)==abs(col-position[i]))
{
return false;
}
}
return true;
} void placeQ(int &count,int row,int *position,int n)
{
int i=,j=;
while(i<n)
{
while(j<n)
{
if (canPlaceQ(i,j,position,n))
{
position[i]=j;
j=;
break;
}
else
{
++j;
}
} if (position[i]==-)
{
if (i==)
{
break;
}
--i;
j=position[i]+;
position[i]=-;//注意清空上一行的位置!!;
continue;
} if (i==n-)
{
++count;
j=position[i]+;//不能用++j,因为寻找到n-1行的列位置后j被重置为0;
position[i]=-;
continue;
}
++i;
} } int totalNQueens(int n)
{
int count=;
if (n<=)
{
return ;
}
int *position=new int[n];
for (int i=;i<n;i++)
{
position[i]=-;
}
int row=;
placeQ(count,row,position,n); return count;
} };

34 N皇后问题Ⅱ的更多相关文章

  1. 算法设计与分析 - 李春葆 - 第二版 - html v2

    1 .1 第 1 章─概论   1.1.1 练习题   1 . 下列关于算法的说法中正确的有( ).   Ⅰ Ⅱ Ⅲ Ⅳ .求解某一类问题的算法是唯一的   .算法必须在有限步操作之后停止   .算法 ...

  2. 54. 八皇后问题[eight queens puzzle]

    [本文链接] http://www.cnblogs.com/hellogiser/p/eight-queens-puzzle.html [题目] 在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即 ...

  3. 极限编程,最强N皇后JAVA解题代码,4秒出15皇后,33秒出16皇后

    私人博客原文链接来自:http://www.hexcode.cn/article/show/eight-queen 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化 8皇后以 ...

  4. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案

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

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

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

  6. C语言 · 8皇后问题改编

    8皇后问题(改编) 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋盘. 输出格式 所能得到的最大数字和 样例输入 1 2 3 4 5 ...

  7. 哈密顿绕行世界问题、n皇后问题

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. 蓝桥杯 算法提高 8皇后·改 -- DFS 回溯

      算法提高 8皇后·改   时间限制:1.0s   内存限制:256.0MB      问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8 ...

  9. javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

    赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...

随机推荐

  1. 回车切换input选框

    在工作中许多时候需要考虑到用户体验,当按下回车键时切换input选框就来得十分必要. <!DOCTYPE HTML> <html> <head> <meta ...

  2. css---2D变形

    1.transfrom:rotate(360deg); 用前要加transition: 2s;                      deg重点 transform:rotate(angle); ...

  3. JPA 基本使用

    ORM简介 对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换. 实现ORM思想的框架:Mybati ...

  4. 基于V8引擎的C++和JS的相互交互

    基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎.去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行:脚本可能是一个表达式:一段js代码:或者一个文件执行表达式返回j ...

  5. Super OJ 序列计数

    题意: 给出序列 a1,a2,--an(0≤ai≤109),求三元组(ai,aj,ak)(1≤i<j<k≤n)满足 ai<aj>ak 的数量. 分析: 开两个\(BIT\),分 ...

  6. Java反射简介

    Java反射简介 1.Class类 1) 在面向对象的世界里,万事万物皆对象.(java语言中,静态的成员.普通数据类型除外) 类是不是对象呢?类是(哪个类的对象呢?)谁的对象呢? 类是对象,类是ja ...

  7. HTML基本案列

    <html> <head> <!-- meta :告诉浏览器,如何翻译汉字 http-equiv :content-type 内容类型 详细内容有后面的值指定 conte ...

  8. Selenium+Webdriver被检测识别出来的应对方案

    在写爬虫,面对很多js 加载的页面,很多人束手无策,更多的人喜欢用Senlenium+ Webdriver,古语有云:道高一尺魔高一丈.已淘宝为首,众多网站都针对 Selenium的js监测机制, 比 ...

  9. java获取服务器路径

    java获取服务器一些信息的方法(服务器地址/相对路径/端口/项目名字 request.getServletContext().getRealPath("/")  获取项目所在服务 ...

  10. day 1 预习

    day1 显卡:全称是显示接口卡,又称显示适配器,是电脑进行数模信号转换设备,承担输出显示图形的任务,显卡接在电脑主板上它将电脑的数字信号转换成模拟信号,让显示器显示出来.同时显卡还有图像处理能力,可 ...