ZenOven's Archivers

From zenoven on 2010-01-03 19:57:11

八皇后代码之JAVA修改版

原代码忘了是在哪里找到的,我只是稍微修改了一点点东西,感觉写的非常不错,里面的注释也不少这里就不说废话了。
public class q8 {
 private int[] arr = new int[8];//这个数组的元素的值表示皇后的纵坐标,元素的下标表示第几行
 private int x=1;//用来标识每次输出的是第几种方法

 public q8() {//构造方法
  // 从第零个皇后开始放置
  huisu(0);
 }

 private void displayArr() {//显示每一种方法中皇后的放置
  System.out.println("<-----第"+x+"种方法开始------>");
  for (int i = 0; i < 8; i++) {
   for (int j = 0; j < 8; j++) {
    if (arr[i] != j) {
     System.out.print(" *");
    } else {
     System.out.print(" Q");
    }
   }

   System.out.println();
  }
  System.out.println("<-----第"+x+++"种方法结束------>"+"\n");
 }

 private boolean canPutQ(int n) {//该方法判断皇后是否能放置
  for (int i = 0; i < n; i++) {
   
   if ( ((n - i) == Math.abs(arr[n] - arr[i]))// 判断对角线的斜率为1或-1
     || (arr[i] == arr[n])
    )
   {
    return false;
   }
  }

  return true;
 }

 private void huisu(int n) {//回溯
  if (n == 8) {
   displayArr(); // 放置皇后
   return;
  } else {
   for (int i = 0; i < 8; i++) {
    //
    arr[n] = i;
    if (canPutQ(n)) {
     // 放下一个皇后
     huisu(n + 1);
    }
   }
  }
 }

 public static void main(String[] args) {
  new q8();
 }
}
>> 什么是八皇后问题

八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。


高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。


以上摘自百度百科[地址:http://baike.baidu.com/view/698719.htm]

查看完整版本: 八皇后代码之JAVA修改版

From 耍下 on 2010-01-03 20:45:14

八皇后问题很出名,但是我不知道是什么东西,杯具啊。 :(14): :(14):

From 江流 on 2010-01-03 21:13:00

是不是应该解析下 啥是八皇后?

From zenoven on 2010-01-03 22:05:43

已经加上了说明 嘿嘿~~

From zenoven on 2010-01-03 22:05:54

嗯,加上了。 :(2):

From 耍下 on 2010-01-03 22:06:57

:(5): 国际象棋?不会

From zenoven on 2010-01-03 22:16:09

:(2): 怎么说呢,就是为了在一个8*8的表格上放8个棋子,他们不在同一行、同一列或同一斜线上,求出有多少种放置方法,可以不用理会国际象棋的。 :(1):

From 园子 on 2010-01-04 11:53:46

我的新年快乐说的晚了 回家了几天 呵呵~

From pfdiy on 2010-01-04 13:33:43

:(11): 很牛逼 就是不知道干啥的 :(7):

From 三七八蛋 on 2010-01-04 14:39:18

学算法的时候好象记得有这道题目。哈,忘记了。

From 卢松松 on 2010-01-04 15:01:18

迟来的新年快乐哈!~ :(9):

From 聪壹艮 on 2010-01-04 15:40:51

自由人,你这主题评论的嵌套回复 怎么实现的 分享下...

From zenoven on 2010-01-04 18:37:10

:(18): 其实我今年的日志是在2号才写的。。。给大家的祝福也晚了呢

From zenoven on 2010-01-04 18:37:36

:(4): 就是一个JAVA代码,也没啥呢

From zenoven on 2010-01-04 18:38:22

这是我们学人工智能的时候老师让写的,我从网上找个觉得不错,稍微改了那么一点点东西 :(18):

From zenoven on 2010-01-04 18:38:44

:(13): 我也迟到了呢。。。 :(11):

From zenoven on 2010-01-04 18:39:43

我的是用插件实现的啊 就这个 Wordpress Thread Comment

From 飞晏 on 2010-01-04 18:50:47

怎么感觉你的头像特像一个商标

From zenoven on 2010-01-04 18:57:25

:(2): 不是吧。。。这个纯粹是我自己设计的额。。。难道我的水平有那么高了? :(11):

Tags: Java/Jsp, 代码, 八皇后


©ZenOven