问题描述:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即: 任意两个皇后都不能处于同一行 、同一列或同一斜线上,问有多少种摆法(92)。

思路分析:1) 第一个皇后先放第一行第一列2) 第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适3) 继续第三个皇后,还是第一列、第二列……直到第 8 个皇后也能放在一个不冲突的位置,算是找到了一个正确解4) 当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到.5) 然后回头继续第一个皇后放第二列,后面继续循环执行 1,2,3,4 的步骤

代码如下:

package linkedlist;

import java.util.Queue;

public class queen {
int max=8;
int [] array=new int[max];
static int count;
public static void main(String args[]){
queen queue=new queen();
queue.check(0);
System.out.println(count);
}
public boolean judge(int n){
for (int i=0;i<n;i++){
if(array[i]==array[n]||Math.abs(i-n)==Math.abs(array[i]-array[n])){
return false;
}
}
return true;
}
public void check(int n){
if(n==max){
print();
return;
}
for (int i=0;i<max;i++){
array[n]=i;
if(judge(n)){
check(n+1);
} }
}
private void print() {
count++;
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
}

其实这个回溯以for循环的角度来看会好理解很多,这个问题可以看成八个for循环嵌套。当最里面的for循环执行完毕后会接着执行紧贴着其的那层外层for循环的下一个元素。

16.java八皇后问题的更多相关文章

  1. Java实现蓝桥杯 算法提高 八皇后 改

    **算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...

  2. 八皇后问题 --- 递归解法 --- java代码

    八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后 ...

  3. 八皇后问题java实现

    八皇后问题java实现 public class eightqueen { public static int count=0; public static void main(String[] ar ...

  4. 使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

  5. Java编程思想—八皇后问题(数组法、堆栈法)

    Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...

  6. 算法学习 八皇后问题的递归实现 java版 回溯思想

    1.问题描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或 ...

  7. java实现八皇后问题(递归和循环两种方式)

    循环方式: package EightQueens;   public class EightQueensNotRecursive { private static final boolean AVA ...

  8. 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题

    两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...

  9. java递归求八皇后问题解法

    八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...

  10. 八皇后问题求解java(回溯算法)

    八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...

随机推荐

  1. 计算机网络基础02-Internet结构,网络核心的数据交换,计算机网络性能几个参数

    1 计算机网络的结构 1.1 网路边缘 主机.应用(软件.网站) 1.2 接入网络 1.3 网络核心 转发设备,路由器.交换机.关键功能就是路由+转发达到数据交换. 2 Internet的结构 2.1 ...

  2. C++_虚函数

    1.目的: 派生类继承自基类.使用指针或引用访问派生类对象时,指针或引用本身所指向的类型可以是基类而不是派生类.如果派生类覆盖了基类中的方法,通过上述指针或引用调用该方法时,可以有两种结果: 调用到基 ...

  3. 2021级《JAVA语言程序设计》上机考试试题7

    现在是学生查看,重置密码,原来是搜索,现在直接浏览,直接重置密码,改了下 代码如下: <%@ page language="java" contentType="t ...

  4. Postgres的count统计误区

    数据库统计数据量时常常用的是count(1)或者count(*),这两者区别不大,在postgres里面统计数据总量时,要注意count(column_name)与count(*)的区别,有些场景下会 ...

  5. Java第五讲异常处理总结

    1. 在运行上述代码时javac产生idiv字节码指令,在运行下面的程序时javac产生ddiv字节指令,导致了两段代码运行结果不同. 2. 3.finally语句块一定会执行吗? /** * 自定义 ...

  6. swiper滑动异常

    遇到这样的情况,一共5张slide,但是从第三个起再往右划就不动了.后来发现是已经初始化swiper后又追加了slide.(大概意思是这样.太久的程序了,也不想仔细捋了) 暂且用到的办法: 先定义好: ...

  7. AppCrawler自动遍历工具,适用于移动端

    AppCrawler下载链接:https://github.com/seveniruby/AppCrawler,主要用途是回归遍历.原则从中间元素开始遍历 AppCrawler框架引擎 appium ...

  8. celery+redis的使用(异步任务、定时任务)

    目录 celery理解 安装celery+redis 异步任务使用 1.基础使用 新建task.py文件 在项目文件目录下执行python交互式编程 在项目文件目录下创建worker消费任务 2.使用 ...

  9. django-drf知识点梳理

  10. 微信h5调分享功能

    功能背景: 基于微信公众号的h5商城页面,实现特定商品的分享,包括朋友圈和好友分享功能. 代码实现(以vue项目为例): 首先贴上官方开发文档:https://developers.weixin.qq ...