原题网址: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. 无LoadLibrary获取指定模块基址

    实际上,这块可以写成汇编,然后做远程注入用 方法 1.通过fs:[30h]获取当前进程的_PEB结构 2.通过_PEB的Ldr成员获取_PEB_LDR_DATA结构 3.通过_PEB_LDR_DATA ...

  2. 偏函数-functools.partial

    1.概念:偏函数是2.5版本以后引进来的东西.属于函数式编程的一部分,使用偏函数可以通过有效地“冻结”那些预先确定的参数,来缓存函数参数,然后在运行时,当获得需要的剩余参数后,可以将他们解冻,传递到最 ...

  3. .net中的泛型全面解析

    从2.0起我们一直就在谈论泛型,那么什么是泛型,泛型有什么好处,与泛型相关的概念又该怎么使用,比如泛型方法,泛型委托.这一篇我会全面的介绍泛型. 那么首先我们必须搞清楚什么是泛型,泛型其实也是一种类型 ...

  4. mysql 数据库基本命令

    停止mysql服务:net stop mysql      //管理员方式运行 启动mysql服务:net start mysql 进入数据库:mysql -u root -p 查看数据库:show ...

  5. Windows服务调试状态下用Console启动

    最近一直在用服务,发现服务也没有那么难调试. Windows服务调试状态下用Console启动:步骤分两步 第一步改Program,启动代码 static class Program { /// &l ...

  6. 使用OCCI操作Oracle数据库写入中文乱码

    解决方法如下: oracle::occi::Environment *pOracleOcciEnv = Environment::createEnvironment(oracle::occi::Env ...

  7. JQuery ajax提交表单及表单验证

    JQuery ajax提交表单及表单验证 博客分类: jsp/html/javascript/ajax/development Kit 开源项目   注:经过验证,formValidator只适合一个 ...

  8. Java int和Integer包装类的区别和比较

    区别:                                                                                                  ...

  9. 2016.8.15上午纪中初中部NOIP普及组比赛

    2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...

  10. CSS案例3(在线教育网站)

    案例练习目的是总结以前的css和html 还有ps的使用. 制作步骤: 准备相关文件.(内部样式表) html文件(index.html) 图片文件 准备CSS 初始化. 书写结构和样式 确定版心(是 ...