zoukankan      html  css  js  c++  java
  • 算法一之N皇后问题

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

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

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

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

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

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

  • 相关阅读:
    关于Shipping
    怎么Debug Background Job [转载sdn]
    如何显示IDoc的每个segment/field的具体说明
    underscore.js
    Javascript Style Guide
    [转] Ajax_XMLHttpRequest对象详解
    ExecutingMethodsFromLinkButtonParameters
    使用C#操作MSExcel表格COM
    [转]HttpContext, HttpModules 和 HttpHandlers
    几个实用的Servlet应用例子入门、cookie、session及上传文件
  • 原文地址:https://www.cnblogs.com/ysugyl/p/4641545.html
Copyright © 2011-2022 走看看