回溯法(国际象棋八皇后放入棋盘)
package recursion;public class Queen {private int num = 0;//累计的方案private static final int MAXQUEEN = 8; private static int [] cols = new int[MAXQUEEN];//MAXQUEEN列皇后放的位置的行下标/*** * @param n 填第 n列的皇后*/public void getCount(int n ) {boolean [] rows = new boolean[MAXQUEEN];for(int m =0;m<n;m++) {rows[cols[m]] = true;//cols[m]表示第m+1个皇后放的行下标int d = n-m;//斜对角方向/* n 表示 填第 n列的皇后 , m 表示 放过的皇后的列下标* rows表示 第n行是否不能放queen* cols 记录的是 下标对应列放的皇后的行下标* cols[m] = p< MAXQUEEN; * 对角线上坐标表示 |p-n| = n-m < MAXQUEEN ;* if(p-n>0),cols[m]-n=d,cols[m]-d=n>=0;* if(p-n<=0),n-cols[m]=d,cols[m]+d=n<MAXQUEEN* */if(cols[m]-d>=0) {rows[cols[m]-d] = true;}//反斜角方向if(cols[m]+d<=(MAXQUEEN-1)) {rows[cols[m]+d] = true;}}//开始放皇后for(int i = 0;i<MAXQUEEN;i++) {if(rows[i]) {//不能continue;}cols[n] = i;//下面还有合法位置if(n<MAXQUEEN-1) {getCount(n+1);}else {//找到了一套合适的方案num ++;printQueen();}}}private void printQueen() {System.out.println("这是第"+num+"种方案!");for(int i =0;i<MAXQUEEN;i++) {for(int j =0;j<MAXQUEEN;j++) {if(i== cols[j]) {System.out.print("0 ");}else {System.out.print("+ ");}}System.out.println();}}public static void main(String[] args) {Queen queen = new Queen();queen.getCount(0);}}
回溯法(国际象棋八皇后放入棋盘)相关推荐
- 回溯法(八皇后问题)及C语言实现
回溯法,又被称为"试探法".解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择.这种走不通就回退再走的 ...
- 栈(Stack)的应用—试探回溯法:八皇后问题、迷宫寻径
栈的应用 试探回溯法 1.八皇后问题 皇后类 struct Queen { //皇后类int x, y; //坐标Queen (int xx = 0, int yy = 0 ) : x(xx), y( ...
- 【回溯法】八皇后问题
问题描述 在国际象棋棋盘(8×8)(8\times8)(8×8)上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 皇后可以攻击处于同一行.同一列和同一对角线上的棋子. 思路分析 八皇后问题可以使用 ...
- 七十八、 回溯法解决八皇后问题
@Author:Runsen 八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后. 来自百度百科,皇后的走法是可 ...
- 回溯法求解N皇后问题(Java实现)
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...
- 回溯法求解N皇后问题及其时间复杂度分析
回溯法求解N皇后问题及其时间复杂度分析 一.回溯法简介 1. 什么是回溯法? 2. 回溯法的时间复杂度分析 蒙特卡罗方法 蒙特卡罗方法在回溯法求解时间复杂度中的应用 二.回溯法求解N皇后问题 1. 回 ...
- 回溯法解决n皇后问题
回溯法解决n皇后问题 题目要求: 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后, ...
- 回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案
回溯算法解决八皇后 4-皇后问题 (4 - Queen's problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 ...
- n皇后问题python_Python:回溯法解N皇后问题
这个算法采用的是一维数组,皇后个数即数组长度,数组值即对应行皇后所在的列. 按照每行至上而下,每一行从第一列起尝试放置皇后,每次仅需判断对于已经放置的皇后是否产生冲突.如果某个位置可以放置,则放置皇后 ...
- 经典回溯算法(八皇后问题)详解
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出: 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列 ...
最新文章
- java笔试题_【干货分享】中兴通讯2021校招笔试测评攻略
- 波音公司计划利用 3D 打印技术制作模块化卫星
- 再谈docker基本命令
- JavaXml教程(二)使用DOM方式解析XML文件
- VTK:八叉树可视化用法实战
- Kick Start 2019 Round D
- Java使用原子类进行多线程的 i++ 操作示例
- 开源的SIP协议栈 PJSIP
- Android官方开发文档Training系列课程中文版:调用相机之控制相机
- grpc通信原理_gRPC原理简析
- powerpoint(ppt) 的制作
- PHP str_replace() 函数详解
- springboot整合shiro之thymeleaf使用shiro标签
- mysql数据库面试题学生表_SQL笔试题:下面是学生表(student)的结构说明
- 【黄啊码】微信小程序+php实现即时通讯聊天功能
- 新浪微博批量取消关注引发的思考
- Primary主类和Catagory分类都存在相同事件
- PMP第二轮复习:整本书内容融会贯通
- 虚拟化与网络存储技术:虚拟化技术、Qemu-KVM
- ZYNQ - 嵌入式Linux开发 -05- Linux C编程和Makefile
热门文章
- PPT参考线_Alt+F9
- 2022.08.24【R语言】|pheatmap外接函数调用时不能有NA/NaN/Inf(arg10)报错问题及解决方案
- CTF--Do you like xml
- KETTLE 新建数据库连接窗口无法打开错误 提示 XUL Definition 错误
- Android Design 与 Holo Theme
- Pyrene-PEG-Rhodamine,芘丁酸-聚乙二醇-罗丹明,RB-PEG-Pyrene
- 【Unity】游戏开发过程中的前后台切换技术
- c语言单片机仿真keil,如何在keil中仿真stm32单片机
- 心形代码来了,Java表白大师
- 飞机大战python_飞机大战python