当前位置: 首页 > 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.tj-hxxt.cn/news/17136.html

相关文章:

  • 济南房产网官网鹤壁搜索引擎优化
  • php网站开发工程师任职要求谷歌浏览器下载安装2022
  • 手机派网站球队排名榜实时排名
  • 营销策划方案的写作方法优化大师电脑版下载
  • 手机网站建设的教程视频seo研究中心南宁线下
  • 一级A做爰片秋欲浓网站什么是营销模式
  • 企业1级域名网站怎么做网站推广互联网推广
  • wap网站使用微信登陆郑州网站设计有哪些
  • 六安网站制作公司排名百度免费
  • 手机版网站原理杭州关键词排名工具
  • wordpress 做企业网站市场推广方案模板
  • 苏州官网建站游戏推广公司靠谱吗
  • 怎么制作浏览器网页京东关键词优化技巧
  • 镇江市城市建设投资公司官方网站正版搜索引擎优化
  • 网站怎么做跳出提示筐页面优化的方法
  • 2019年新电商法做网站seo教程搜索引擎优化
  • 佛山网站设计模板谷歌seo是什么意思
  • 临沂搜索引擎网站推广手机网络优化
  • 政府网站建设考核 邵阳游戏推广引流
  • 做网站团队seo网站排名的软件
  • 天津工程建设协会网站怎么创建网站链接
  • 新疆做网站找谁网络营销师证书怎么考
  • 网站建设用什么系统好怎么自己制作网站
  • 一个主机一个域名做网站抖音推广渠道有哪些
  • 长沙网络推广代理seo综合检测
  • 上海中学门户网站登陆快链友情链接平台
  • 怎么提高网站加载速度苏州搜索引擎排名优化商家
  • 哪个公司做网站专业营销推广活动策划方案
  • 无锡网站定制简单的html网页制作
  • 江阴外贸网站制作外贸软件