(写这篇文章主要是明天就要考试了,算法考试,今天不想再复习了,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

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

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

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

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

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

算法一之N皇后问题的更多相关文章

  1. 加密算法 - RSA算法一

    RSA算法原理(一)  声明: 本文转自 -- 作者: 阮一峰 (http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html) ...

  2. 决策树之Cart算法一

    Contents    1. CART算法的认识    2. CART算法的原理    3. CART算法的实现 1. CART算法的认识 Classification And Regression ...

  3. Solr相似度算法一:Lucene TF-IDF 相关性算分公式

    Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...

  4. PCB 板边倒圆角的实现方法(基本算法一)

    PCB外形是直角时外形时,通常工程制作时,外是直角或尖角的地方倒圆角,主要是为了防止板边容易划伤板且容易扎伤人 所以当客户没有特殊要求时,PCB外形是直角时一般会默认倒角0.5mm圆角(如下图所示) ...

  5. Java数组相关算法一

    一.数组反转 1.方法一:创建新数组 int[] arr = {6,29,0,4,3}; int[] arr2 = new int[arr.length]; for (int i = 0; i < ...

  6. 决策树算法一:hunt算法,信息增益(ID3)

    决策树入门 决策树是分类算法中最重要的算法,重点 决策树算法在电信营业中怎么工作? 这个工人也是流失的,在外网转移比处虽然没有特征来判断,但是在此节点处流失率有三个分支概率更大 为什么叫决策树? 因为 ...

  7. 人脸识别经典算法一:特征脸方法(Eigenface)

    这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新.特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的.特征脸用到的理论基础PCA在另一篇博客里:特征脸(Eig ...

  8. 机器学习算法一:K-近邻算法

    最近在<机器学习实战>里学习了一些基本的算法,对于一个纯新手我也在网上找了写资料,下面就我在书上所看的加上在其他博客上的内容做一个总结,博客请参照http://www.cnblogs.co ...

  9. Unity人工智能学习—确定性AI算法之追踪算法一

    转自http://blog.csdn.net/zhangxiao13627093203/article/details/47451063 尽管随机运动可能完全不可预知,它还是相当无趣的,因为它完全是以 ...

随机推荐

  1. 卷积神经网络(CNN)新手指南 1

    http://blog.csdn.net/real_myth/article/details/52273930 卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 ...

  2. RS485中继器电路(转)

    源:RS485中继器电路(转) --------以上部分请勿修改!------------- RS-485中继器 由于在双绞线上的电平损耗,RS-485标准通信的最大传输距离是1200米(4000英尺 ...

  3. 1、下载LInux版的tomcat6

    1.下载LInux版的tomcat6 http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.37/bin/apache-tomcat-6.0.37. ...

  4. Nginx安装及配置虚拟主机

    nginx安装部分 依赖环境 yum -y install gcc zlib openssl-devel zlib-devel 1. 下载好下面两个包:nginx-1.8.1.tar.gz pcre- ...

  5. POJ 2395 Out of Hay

    这个问题等价于求最小生成树中权值最大的边. #include<cstdio> #include<cstring> #include<cmath> #include& ...

  6. CodeForces 625A Guest From the Past

    贪心水题 #include <stdio.h> #include <algorithm> #include <string.h> #include <queu ...

  7. ARM处理器简介

    参考: http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php 1.ARM核演变图 2.AR ...

  8. Struts2验证

    一.声明式验证 1.字段验证 fielderror的两种显示方式 fielderror的提示信息可以国际化 2.非字段验证:actionErrors / <s:actionerror> 例 ...

  9. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  10. r.js build.js配置

    /* * This is an example build file that demonstrates how to use the build system for * require.js. * ...