八皇后问题的高效解法-递归版

原创 2003年08月20日 21:40:00

// Yifi  2003  have fun!  : )

//8 Queen 递归算法
//如果有一个Q 为 chess[i]=j;
//则不安全的地方是 k行  j位置,j+k-i位置,j-k+i位置

class Queen8{


  static final int QueenMax = 8;
  static int oktimes = 0;
  static int chess[] = new int[QueenMax];//每一个Queen的放置位置


  public static void main(String args[]){
    for (int i=0;i<QueenMax;i++)chess[i]=-1; 
    placequeen(0);
    System.out.println("/n/n/n八皇后共有"+oktimes+"个解法    made by yifi 2003");
  }


  public static void placequeen(int num){ //num 为现在要放置的行数
    int i=0;
    boolean qsave[] = new boolean[QueenMax];
    for(;i<QueenMax;i++) qsave[i]=true;
   
    //下面先把安全位数组完成
    i=0;//i 是现在要检查的数组值
    while (i<num){
      qsave[chess[i]]=false;
      int k=num-i;
      if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) ) qsave[chess[i]+k]=false;
      if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) ) qsave[chess[i]-k]=false;
      i++;
    }
    //下面历遍安全位
    for(i=0;i<QueenMax;i++){
      if (qsave[i]==false)continue;
      if (num<QueenMax-1){
        chess[num]=i;
        placequeen(num+1);
      }
      else{ //num is last one
      chess[num]=i;
      oktimes++;
      System.out.println("这是第"+oktimes+"个解法 如下:");
      System.out.println("第n行:  1 2 3 4 5 6 7 8");
     
      for (i=0;i<QueenMax;i++){
       String row="第"+(i+1)+"行:  ";
       if (chess[i]==0);
       else
        for(int j=0;j<chess[i];j++) row+="--";
        row+="++";
        int j = chess[i];
        while(j<QueenMax-1){row+="--";j++;}
       System.out.println(row);
      }
      }
    }
  //历遍完成就停止
  }
}

 

我做的一个此问题的优化算法。 请大家多多发表意见哦 :)

mailto:yifi@tom.com

版权声明:本文为博主原创文章,未经博主允许不得转载。

八皇后问题(最简单的递归解法)

题目 原文: Write an algorithm to print all ways of arranging eight queens on a chess board so that...
  • yangting09032214
  • yangting09032214
  • 2015年08月27日 15:24
  • 1709

八皇后问题的递归解法(最易理解的版本)

八皇后问题是一个古来而著名的问题,该问题是19世纪著名的数学家高斯同学提出来的。在8*8的国际象棋上摆放八个皇后,使其不能互相的攻击,也就是说,任意的两个皇后不能放在同一行或则是同一个列或者是同一个对...
  • nmgrd
  • nmgrd
  • 2017年03月23日 20:56
  • 899

八皇后问题递归解法

八皇后问题
  • u012842664
  • u012842664
  • 2015年08月02日 18:25
  • 3474

递归算法学习系列之八皇后问题

1.引子    中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年09月29日 21:33
  • 2230

回溯 八皇后问题(递归和非递归)

8皇后问题:如何在8 x 8的国际象棋棋盘上安排8个皇后,使得没有两个皇后能互相攻击?( 如果两个皇后处在同一行、同一列或同一条对角线上,则她们能互相攻击。) 解向量为长度为8的数组,记为solut...
  • march_on
  • march_on
  • 2011年11月30日 16:35
  • 5253

Python八皇后问题的学习体会与分析-递归的运用

这是教材上的代码: def conflict(state, nextX): nextY = len(state) for i in range(nextY): if ...
  • txlgl
  • txlgl
  • 2017年02月08日 22:37
  • 395

八皇后问题(回溯+递归)/(回溯+非递归)

八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。分析:我们可以尝试在将第一个皇后摆放在第0行第0列,为了不冲突,将...
  • zx3517288
  • zx3517288
  • 2016年12月15日 22:10
  • 747

八皇后问题的分析与解法

问题描述: 在8*8的国际象棋棋盘上,要求在每一行(或者每一列)放置一个皇后,且能做到在水平方向、竖直方向和斜方向都没有冲突。请列出所有解法。 根据上述描述,我们可以得到如果两个皇后Q1(x...
  • friendbkf
  • friendbkf
  • 2015年11月17日 19:38
  • 1442

理解使用递归及堆栈的算法处理八皇后问题

八皇后算法
  • lnnnd
  • lnnnd
  • 2016年05月26日 15:39
  • 4130

八皇后问题的两种解法

1.全排列: 阶梯思想:
  • guoxiaowei400
  • guoxiaowei400
  • 2014年10月21日 22:45
  • 389
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:八皇后问题的高效解法-递归版
举报原因:
原因补充:

(最多只允许输入30个字)