前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法一之N皇后问题

算法一之N皇后问题

作者头像
用户1631856
发布2018-04-12 11:48:38
7050
发布2018-04-12 11:48:38
举报
文章被收录于专栏:老秦求学老秦求学

(写这篇文章主要是明天就要考试了,算法考试,今天不想再复习了,xiang着今天也开通了博客,于是在这个平台上进行复习,应该会更高效。最后祝愿我明天考个好成绩。嘻嘻。。。)

n皇后问题,主要是应用到回溯法。首先选取一条路径进行计算,如果不满足条件则,进行回溯,选择另外的路径进行计算。

我觉得回溯法:就想是在走迷宫,先选取一条路进行走,如果不能走通,就返回,在选择路口的地方,选择其他的路口,如果能走通,就说明路径选择正确。也就是说找到了解决问题的方法。

下面进行代码分析与解决:

问题分析,n皇后问题,问题分析不用说了,主要是进行伪代码的分析与求解。不同行,不同列,不在同一斜线上。

应用到SPARKS 语言

(1)判断一个地方是否可以放置一个皇后 

procedure PLACE(k)

 global X(k);integer i,k;//X(l)放置皇后的数列,下标是皇后放置的行,X(i)是皇后放置的列

 i<-1;

 for i<k do

  if X(i)=X(k) or ABS(i-k)=ABS(X(i)-X(k))//判断第k个皇后与前面的k-1个皇后是否冲突。ABS:是判断是否在同一斜线上。

    then return (false)

  endif

  i<-i+1;

 repeat

 return (true);

end PLACE 

(2)n皇后问题的解决

procedure NQUEENS(n)

  global k,n,X(1:n)//k是当前行,X(k)是当前列

  X(1)<-0;K<-1;

  while k>0 do//对所有行进行如下操作

    X(k)<-X(k)+1//移到下一列

    while X(k)<=n and not PLACE(k) do//如果当前位置不能放移到下一列

      X(k)<-X(k)+1

    repeat

  //当前位置能进行放置

  if X(k)<=n//当前列必须满足小于n

    then if k=n  //判断是否为一个完整的解。

      then print(X)//是,输出解

      else k<-k+1,X(k)<-0;//否,移动到下一行,列从头开始

      endif

  else k<-k-1//不满足,说明这样不能满足解。所以进行回溯。

  endif

  repeat

end NQUEENS

···············································································································

好了,一个问题已经解决了。下面在回顾一下。

这个问题理解了也不是那么麻烦。明天考试要注意的地方有哪些呢?

  一条路走到底,碰到南墙回头,找到另外的路径。

最后明天考个好成绩。进行下一算法的分析计算。加油!!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档