当前位置: 首页 > news >正文

试用网站空间app拉新推广平台代理

试用网站空间,app拉新推广平台代理,深圳seo网站设计,顺德网站建设基本流程转载自matrix67 位运算简介及实用技巧(三):进阶篇(2) n皇后问题位运算版 n皇后问题是啥我就不说了吧,学编程的肯定都见过。下面的十多行代码是n皇后问题的一个高效位运算程序,看到过的人都夸它牛。初始时&#…

转载自matrix67   位运算简介及实用技巧(三):进阶篇(2)

n皇后问题位运算版
    n皇后问题是啥我就不说了吧,学编程的肯定都见过。下面的十多行代码是n皇后问题的一个高效位运算程序,看到过的人都夸它牛。初始时,upperlim:=(1 shl n)-1。主程序调用test(0,0,0)后sum的值就是n皇后总的解数。拿这个去交USACO,0.3s,暴爽。
procedure test(row,ld,rd:longint);
var
      pos,p:longint;
begin

{ 1}  if row<>upperlim then
{ 2}  begin
{ 3}     pos:=upperlim and not (row or ld or rd);
{ 4}     while pos<>0 do
{ 5}     begin
{ 6}        p:=pos and -pos;
{ 7}        pos:=pos-p;
{ 8}        test(row+p,(ld+p)shl 1,(rd+p)shr 1);
{ 9}     end;
{10}  end
{11}  else inc(sum);

end;

    乍一看似乎完全摸不着头脑,实际上整个程序是非常容易理解的。这里还是建议大家自己单步运行一探究竟,实在没研究出来再看下面的解说。

  
    和普通算法一样,这是一个递归过程,程序一行一行地寻找可以放皇后的地方。过程带三个参数,row、ld和rd,分别表示在纵列和两个对角线方向的限制条件下这一行的哪些地方不能放。我们以6×6的棋盘为例,看看程序是怎么工作的。假设现在已经递归到第四层,前三层放的子已经标在左图上了。红色、蓝色和绿色的线分别表示三个方向上有冲突的位置,位于该行上的冲突位置就用row、ld和rd中的1来表示。把它们三个并起来,得到该行所有的禁位,取反后就得到所有可以放的位置(用pos来表示)。前面说过-a相当于not a + 1,这里的代码第6行就相当于pos and (not pos + 1),其结果是取出最右边的那个1。这样,p就表示该行的某个可以放子的位置,把它从pos中移除并递归调用test过程。注意递归调用时三个参数的变化,每个参数都加上了一个禁位,但两个对角线方向的禁位对下一行的影响需要平移一位。最后,如果递归到某个时候发现row=111111了,说明六个皇后全放进去了,此时程序从第1行跳到第11行,找到的解的个数加一。

http://www.dt0577.cn/news/36643.html

相关文章:

  • 做设备出口网站怎么在网上做广告
  • 天河做网站开发百度如何添加店铺位置信息
  • 店铺推广渠道广州seo网站管理
  • 怎么免费做网站不要域名关键词林俊杰mp3下载
  • 家政网站建设方案广州优化营商环境条例
  • 南通做网站baidu tg自动点击器永久免费版
  • 淘宝客网站怎么做的怎么交换友情链接
  • 做网站的奶茶推广软文200字
  • 河北专业做网站有没有免费的推广网站
  • 可做外链的网站软文推广多少钱一篇
  • 电商网站哪家做的好怎么做一个自己的网页
  • 什么叫宣传型网站无代码建站
  • 免费的个人简历模板word官网seo是什么意思
  • 网站关键词做的越多越好吗中国站长
  • 网站开发工具的快手seo关键词优化
  • 相册网站怎么做今天国际新闻最新消息
  • 江阴网站设计哪家好列举五种网络营销模式
  • 北京通州网站建设衡阳有实力seo优化
  • 企业网站一般要素重庆seo扣费
  • 巴塘网站建设网站推广方案策划
  • 佛山网站维护宁波seo快速优化课程
  • 模板网站建设信息百度搜索风云榜单
  • 做个素材网网站难做吗360推广开户
  • 阿里云做网站教程百度下载安装到桌面上
  • 苏州seo建站五种网络营销推广方法
  • 运城有做网站设计网页
  • 品牌建设不足的原因优化大师是什么软件
  • 重庆网站整合营销电商是做什么的
  • 网站建设博客百度快照推广效果怎样
  • 瓷器网站怎么做seo网络优化是做什么的