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

试用网站空间如何搭建网站平台

试用网站空间,如何搭建网站平台,网站建公司生存,闵行广州网站建设转载自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.yidumall.com/news/73998.html

相关文章:

  • 外贸独立站seo百度网站优化
  • 网站原创文章优化推广员网站
  • 手机网站开发书籍个人建网站的详细步骤
  • 2008系统怎么做网站seo推广关键词公司
  • 无锡网络公司服务搜索引擎优化趋势
  • 中小型网站建设价位seo就业指导
  • 网站刷单账务处理怎么做公司网站建设需要多少钱
  • 邢台专业做网站价格百度关键词搜索次数
  • 搜狗网站收录提交入口seo优化关键词0
  • 查答案的网站制作模板廊坊百度快照优化排名
  • 佛山附近做网站的公司搜索引擎优化中的步骤包括
  • 网站建设一站式高级搜索引擎技巧
  • 小程序开发平台要多少钱无排名优化
  • 公司网站制作都需要图片查网站流量查询工具
  • 体育网站建设需求线上宣传推广方式
  • 做平面那个网站素材好互联网推广方式
  • 网络公司网站建设彩铃样本网红营销
  • 多语言网站怎么做佛山网站开发公司
  • 网站对齐原则seo营销推广平台
  • 给公司做企业网站业务推广方式有哪些
  • 国内重大新闻2020年推广关键词如何优化
  • 深圳网站制作的公司哪家好百度搜索关键词热度
  • 网站建设教程吧谷歌推广效果好吗
  • 佟年给韩商言做的网站收录好的网站有哪些
  • 阅读网站模板营销自动化
  • 响应式网页设计总结seo是什么意思seo是什么职位
  • 厦门建设工程造价信息网重庆网络seo
  • 最近国内重大新闻工具seo
  • wordpress开发上传图片优化大师怎么卸载
  • wordpress怎么设置语言设置seo实战密码第四版