1. 数据结构和算法(十一)递归-八皇后问题
1.1 八皇后问题
-
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。大数学家高斯认为一共有76种摆法,1854年在柏林的象棋杂志上不同的作者发表了共计40种不同的见解,后来还有人利用图论的方法得出共有92种摆法。
-
如何解决八皇后问题?
使用递归回溯法,这种方法从棋盘的第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后。如果当前位置无法摆放,则向右移动一格再次尝试,如果摆放成功,则继续递归一层,摆放第三个皇后…
1.2 JAVA实现摆放方式
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
package com.yuanxw.datastructure.chapter11;
/**
* 8皇后问题
* 解:8皇后问题回溯方式
*/
public class Queen8Example {
// 最大步骤
private static int MAX_QUEEN = 8;
private static int playCount = 0;
private static int validCount = 0;
/**
* 棋局
* 下标(index)表示行
* 值(value)表示列
*/
private int chessGame[] = new int[MAX_QUEEN];
public static void