loading...
原代码忘了是在哪里找到的,我只是稍微修改了一点点东西,感觉写的非常不错,里面的注释也不少这里就不说废话了。
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]
怎么感觉你的头像特像一个商标
loading...
:(2): 不是吧。。。这个纯粹是我自己设计的额。。。难道我的水平有那么高了? :(11):
loading...
自由人,你这主题评论的嵌套回复 怎么实现的 分享下…
loading...
我的是用插件实现的啊 就这个 WordPress Thread Comment
loading...
迟来的新年快乐哈!~ :(9):
loading...
:(13): 我也迟到了呢。。。 :(11):
loading...
学算法的时候好象记得有这道题目。哈,忘记了。
loading...
这是我们学人工智能的时候老师让写的,我从网上找个觉得不错,稍微改了那么一点点东西 :(18):
loading...
:(11): 很牛逼 就是不知道干啥的 :(7):
loading...
:(4): 就是一个JAVA代码,也没啥呢
loading...
我的新年快乐说的晚了
回家了几天
呵呵~
loading...
:(18): 其实我今年的日志是在2号才写的。。。给大家的祝福也晚了呢
loading...
是不是应该解析下 啥是八皇后?
loading...
嗯,加上了。 :(2):
loading...
八皇后问题很出名,但是我不知道是什么东西,杯具啊。 :(14): :(14):
loading...
已经加上了说明 嘿嘿~~
loading...
:(5): 国际象棋?不会
loading...
:(2): 怎么说呢,就是为了在一个8*8的表格上放8个棋子,他们不在同一行、同一列或同一斜线上,求出有多少种放置方法,可以不用理会国际象棋的。 :(1):
loading...