[leetcode] N-Queens II

N-Queens II

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

 

 

 1 class Solution
 2 {
 3 private:
 4   // 试探算法从最右边的列开始。
 5 void test(long row, long ld, long rd)
 6 {
 7      if (row != upperlim)
 8      {
 9           // row,ld,rd进行“或”运算,求得所有可以放置皇后的列,对应位为0,
10           // 然后再取反后“与”上全1的数,来求得当前所有可以放置皇后的位置,对应列改为1。
11           // 也就是求取当前哪些列可以放置皇后。
12           long pos = upperlim & ~(row | ld | rd); 
13           while (pos) // 0 -- 皇后没有地方可放,回溯。
14           {
15                // 拷贝pos最右边为1的bit,其余bit置0。
16                // 也就是取得可以放皇后的最右边的列。
17                long p = pos & -pos;                                               
18 
19                // 将pos最右边为1的bit清零。
20                // 也就是为获取下一次的最右可用列使用做准备,
21                // 程序将来会回溯到这个位置继续试探。
22                pos -= p;                            
23 
24                // row + p,将当前列置1,表示记录这次皇后放置的列。
25                // (ld + p) << 1,标记当前皇后左边相邻的列不允许下一个皇后放置。
26                // (ld + p) >> 1,标记当前皇后右边相邻的列不允许下一个皇后放置。
27                // 此处的移位操作实际上是记录对角线上的限制,只是因为问题都化归
28                // 到一行网格上来解决,所以表示为列的限制就可以了。显然,随着移位
29                // 在每次选择列之前进行,原来N×N网格中某个已放置的皇后针对其对角线
30                // 上产生的限制都被记录下来了。 
31                test(row | p, (ld | p) << 1, (rd | p) >> 1);                              
32           }
33      } 
34      else    
35      {
36           // row的所有位都为1,即找到了一个成功的布局,回溯。
37           sum++;
38      }
39 }
40 
41 public:
42   int totalNQueens(int n)
43   {
44     upperlim = 1;
45     sum = 0;
46 
47     upperlim = (upperlim << n) - 1;
48     test(0, 0, 0);
49 
50     return sum;
51   } 
52 private:
53   int upperlim;
54   int sum;
55 };

 

转载于:https://www.cnblogs.com/lxd2502/p/4378103.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php设计模式-工厂设计模式

概念&#xff1a; 工厂设计模式提供获取某个对象的新实例的一个接口&#xff0c;同时使调用代码避免确定实际实例化基类步骤。 很多高级模式都是依赖于工厂模式。 转载于:https://www.cnblogs.com/sjhsszl/p/8729217.html

一幅长文细学MongoDB(四)——索引

4 索引 文章目录4 索引4.1 概述4.2 索引类型4.3 索引创建4.3 删除索引4.4 查看索引执行计划4.5 涵盖的查询4.1 概述 说明&#xff1a;索引支持在MongoDB中高效地查询。如果没有索引&#xff0c;MongoDB必须执行全集合扫描&#xff0c;即扫描集合中的每个文档&#xff0c;以选择…

【转】Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]

Fresco简单的使用—SimpleDraweeView 百学须先立志—学前须知&#xff1a; 在我们平时加载图片(不管是下载还是加载本地图片…..)的时候&#xff0c;我们经常会遇到这样一个需求&#xff0c;那就是当图片正在加载时应该呈现正在加载时的图像&#xff0c;当图片加载失败时应该呈…

对象映射工具AutoMapper介绍

AutoMapper是用来解决对象之间映射转换的类库。对于我们开发人员来说&#xff0c;写对象之间互相转换的代码是一件极其浪费生命的事情&#xff0c;AutoMapper能够帮助我们节省不少时间。 一. AutoMapper解决了什么问题? 要问AutoMapper解决了什么问题&#xff1f; 难道不是对象…

MindSpore安装教程【简洁易懂】

1 官网 MindSpore官网&#xff1a;MindSpore安装指南 2 关注社区 3 下载 查看自己python版本&#xff1a;使用python -V查看自己python版本 进入官网选择相应配置&#xff1a; 验证是否安装成功&#xff1a;python -c "import mindspore;mindspore.run_check()"&a…

php文件操作基本使用方法

<?php/* $fpfopen("tmp.html","r");$strfread($fp,filesize("tmp.html"));$strstr_replace("{title}",新标题,$str);$strstr_replace("{content}",新内容,$str); fclose($fp); $handlefopen(new.html,w); fwrite($handl…

一幅长文细学Vue(十三)——组合式中的生命周期

13 组合式API&#xff08;四&#xff09; 摘要&#xff1a;每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被…

NodeJs实现自定义分享功能,获取微信授权+用户信息

最近公司搞了个运营活动&#xff0c;入口放在了微信公众号里&#xff0c;好久没碰过微信了&#xff0c;刚拾起来瞬间感觉有点懵逼。。。。似乎把之前的坑又都重新踩了一遍&#xff0c;虽然过程曲折&#xff0c;不过好在顺利完成了&#xff0c;而且印象也更加深刻了&#xff0c;…

git的简单理解及基础操作命令

前端小白一枚&#xff0c;最近开始使用git&#xff0c;于是花了2天看了廖雪峰的git教程(偏实践&#xff0c;对于学习git的基础操作很有帮助哦)&#xff0c;也在看《git版本控制管理》这本书(偏理论&#xff0c;内容完善&#xff0c;很不错)&#xff0c;针对所学内容建了git仓库…

iOS 后台挂起的一些坑

特别说明&#xff1a;后台状态&#xff1a;当前app如果不是作为屏幕中的第一层&#xff0c;呈现显示给用户&#xff0c;那么此时app就是后台状态。锁屏&#xff08;包括&#xff1a;当前应用下锁屏、其他应用下锁屏、桌面锁屏&#xff09; 用户在使用其他应用app2&#xff0c;…

OSGI 生命周期

1 生命周期管理 对于非模块化应用&#xff0c;生命周期将应用作为一个整体来操作&#xff1b;而对于模块化应用&#xff0c;则可以以细粒度的方式来管理应用的某一个独立部分。OSGi生命周期管理 OSGi生命周期层有两种不同的作用&#xff1a; 在应用程序外部&#xff0c;定义了对…

tomcat+nginx+redis实现均衡负载、session共享

在项目运营时&#xff0c;我们都会遇到一个问题&#xff0c;项目需要更新时&#xff0c;我们可能需先暂时关闭下服务器来更新。但这可能会出现一些状况:1.用户还在操作&#xff0c;被强迫终止了(我们可以看日志等没人操作的时候更新&#xff0c;但总可能会有万一)2.不知道的用户…

洛谷 P3184 [USACO16DEC]Counting Haybales数草垛

洛谷 P3184 [USACO16DEC]Counting Haybales数草垛 题目描述 Farmer John has just arranged his NN haybales (1 \leq N \leq 100,0001≤N≤100,000 ) at various points along the one-dimensional road running across his farm. To make sure they are spaced out appropria…

关于笔试的一些博客

这里收集了一些阿里的网上笔试题目 阿里笔试题(2015)持续更新中腾讯阿里实习生招聘笔试总结阿里2014研发实习生笔试题解析【阿里】算法工程师笔试题整理&#xff08;13&14年&#xff09;【阿里】算法工程师笔试【2015.04.02】转载于:https://www.cnblogs.com/chen310/p/438…

Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体

问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Painting(绘画)类型的实体,如Figure 13-2所示: Figure 13-2. The Painting entity type in our model 在代码In Listi…

C#心得与经验(二)

本周学到很多C#关于Interface, Array的知识&#xff0c;在这里简单复习一下几个易混的地方&#xff0c;重在理解。 一、Interface 使用as来避免多态时没有接口的Exception&#xff1a; Document [] folder new Document[5]; for (int i 0; i < 5; i) {if (i % 2 0){fold…

java实例化对象

摘要&#xff1a;分享牛&#xff0c;分享牛分享&#xff0c;java类加载机制&#xff0c;java实例化对象&#xff0c;java实例化对象机制&#xff0c;java基础。 java是如何实例化对象的呢&#xff1f;以及实例化对象的先后顺序是什么&#xff1f;下面我们以测试的方式说明. 1.1…

项目总结(3.28)

项目是用vuewebpackelementUI 完成的。虽然没有什么深奥的技术和难点&#xff0c;但是有些细节还是值得注意的。 1、满足不同屏幕尺寸下缩放全屏显示。 单单只靠宽度、高度百分比是不可以实现的&#xff0c;比如如果宽度设置百分比&#xff0c;当屏幕宽度比较小时&#xff0c;这…

Android开发删除短信

本人一直有一个需求&#xff0c;想要手机自动拦截黑名单里联系人的信息并自动删除这些短信&#xff0c;手机管家之类的软件可以拦截但是没找到能删除这些短信的&#xff0c;于是就萌生了想自己写一个android软件的想法。 加上物联网的兴起&#xff0c;安卓设备开发肯定前景很好…

让你提升命令行效率的 Bash 快捷键 [完整版]

生活在 Bash shell 中&#xff0c;熟记以下快捷键&#xff0c;将极大的提高你的命令行操作效率。 编辑命令 Ctrl a &#xff1a;移到命令行首Ctrl e &#xff1a;移到命令行尾Ctrl f &#xff1a;按字符前移&#xff08;右向&#xff09;Ctrl b &#xff1a;按字符后移&…