您现在的位置: 中国IT实验室 >> 软件水平考试 >> 考试技巧 >> 文章正文
八皇后问题的高效解法-递归版

ChinaITLab.com  2003-10-11  保存本文  推荐给好友  QQ上看本站  收藏本站



  // 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   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  
   //下面先把安全位数组完成
   i=0;//i 是现在要检查的数组值
   while (i   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   if (qsave[i]==false)continue;
   if (num   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   String row="第"+(i+1)+"行: ";
   if (chess[i]==0);
   else
   for(int j=0;j   row+="++";
   int j = chess[i];
   while(j   System.out.println(row);
   }
   }
   }
   //历遍完成就停止
   }
  }
  
   我做的一个此问题的优化算法。 请大家多多发表意见哦 :)
  
  mailto:yifi@tom.com
  




 相关文章  热门文章
系统分析师论文"论建立企业INTRANET的策略"
计算机软件水平考试:《数据结构》是核心
系统分析员考试备考要略
系统分析员备考之经济管理篇(二)
系统分析员备考之经济管理篇(一)
软件设计师复习--检错码CRC
关于高程下午试题的一些预测与解题方法
程序高手必读:写好C程序的10条秘籍
数据结构学习(C++)——二叉树 
1990-2000年事务处理流程图和数据流图试题分…

 文章评论


认证培训
热门专题       more
相关下载
论坛新帖
博 客