1八皇后问题介绍
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92种)。
八皇后问题解法
这里使用递归回溯法求八皇后解法问题。
1)理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题. arr[8] ={0 , 4, 7, 5, 2, 6, 1, 3} //一维数组的第n个元素即代表第n-1(从第0行开始)行,第n个元素的值即代表第n行的列值,对应 arr 下标 表示第几行,即第几个皇后,arr[i] = val , val 表示第 i+1 个皇后,放在第 i+1行的第 val+1 列。
2)我们在求解的过程中,每添加一个皇后,行数加1,所以不会出现任意两个皇后处在同一行的情况,所以我们只需判断任意两个皇后不在同一列,也不在同一斜线上即可。
3)从第0行第0列开始放第一个皇后,依此循环8个皇后。
代码实现
package com.example.dataStructureAndAlgorithm.recursion;
public class Queue8 {
private static int max = 8;
private static int[] arr = new int[max];
private static int count = 0;
private static int judgeCount = 0;
public static void main(String[] args) {
Queue8 queue8 = new Queue8();
queue8.check(0);
System.out.printf

本文介绍了八皇后问题,这是一个经典的回溯算法问题。通过使用递归回溯法,用一维数组表示棋盘,避免皇后互相攻击。文章详细解析了判断皇后冲突的条件,并给出了Java代码实现和分析。
最低0.47元/天 解锁文章
3711

被折叠的 条评论
为什么被折叠?



