当前位置: 首页 > 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.bjxfkj.com.cn/article/101715.html

相关文章:

  • 企业建站套餐价格表网站模板哪里好
  • 网站图片做cdn网络销售有哪些
  • 网站域名登陆地址查询成都百度
  • 上海公司做网站的卢松松外链工具
  • 莆田做外贸网站seo推广方法
  • div+css网站模版下载网站推广策划方案
  • 企业网站页面宽哪里设置网络宣传推广
  • 有没有设计网站在广州的国外域名注册网站
  • 济南企业营销型网站建设价格企业网站建设报价表
  • 牛视频网站建设朝阳网站seo
  • 品牌营销策划网站搜索引擎哪个好
  • 卖主机 服务器的网站制作网站免费
  • 电大形考任在哪个网站做东莞网站建设公司排名
  • 网站seo模块baidu百度
  • 网站建设规划报告网络营销推广策划方案
  • 家里做网站买什么服务器好怎样优化网站
  • 如何建设视频资源电影网站如何搭建企业网站
  • 浅析b2c电子商务网站的建设深圳网站制作
  • 创建公司策划书怀化网站seo
  • 黄骅港神华集团招聘信息一个网站可以优化多少关键词
  • android studio中文怎么设置seo哪家好
  • 网站后台如何做国内ip地址 免费
  • 网站模板 山万网app下载
  • wordpress后台为什么这么慢深圳seo网站推广方案
  • 郴州建设工程建设信息网站百度推广点击软件
  • 互联网保险对传统保险有哪些影响宁波网站关键词优化公司
  • 对网站进行seo优化网上打广告有哪些软件
  • excel可以做网站吗web网页模板
  • 东莞做营销型网站南京seo优化
  • 英文视频网站如何做外链行业关键词词库