n-Queens(n皇后)问题的简单回溯
package com.main;
import java.util.LinkedList;
public class NoQueue {
public LinkedList<Node> getQueue(int n){
LinkedList<Node> queues = new LinkedList<Node>();
int m=0;
boolean p = true; // 是否需要向上回溯
while(m < n){
if(m == 0){
Node q= new Node(0,0);
queues.add(q);
m++;
}
if(n >0){
Node q = queues.getLast();
if(p){
p=false; // 默认没找到
for(int i=0;i<n;i++){
Node q1 = new Node(q.x+1,i);
// 比较
if(checkQueue(q1,queues)){ // 找到结果,向下一步追踪
queues.add(q1);
m++;
p=true;
break;
}
}
}else{ // 没有找到结果向上回溯
q =queues.removeLast(); // 把最后一个取出来
for(int i=q.y+1;i<n;i++){
Node q1= new Node(q.x,i);
if(checkQueue(q1,queues)){ // 找到结果,向下一步追踪
queues.addLast(q1);
p=true;
break;
}
}
if(!p){
m--;
}
}
}
}
return queues;
}
public boolean checkQueue(Node q1,LinkedList<Node> queues){
boolean b = true;
if(queues.size() == 0){
return b;
}
for(int i=0;i<queues.size();i++){
Node q = queues.get(i);
if(q1.x==q.x || q1.y==q.y || q1.x-q.x == q1.y-q.y || q1.x-q.x == -1*(q1.y-q.y)){
b=false;
break;
}
}
return b;
}
public static void main(String[] args) {
NoQueue noq = new NoQueue();
int n= 4;
LinkedList<Node> l = noq.getQueue(n);
for(int j=0;j<n;j++){
for(int i=0;i<n;i++){
Node node= l.get(i);
if(j == node.y){
System.out.print(" Q");
}else{
System.out.print(" 1");
}
}
System.out.println();
}
}
class Node {
int x;
int y;
public Node(int i,int j){
this.x=i;
this.y=j;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return x+","+y;
}
}
}
n-Queens(n皇后)问题的简单回溯的更多相关文章
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...
- UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索
UVa 167 题意:八行八列的棋盘每行每列都要有一个皇后,每个对角线上最多放一个皇后,让你放八个,使摆放位置上的数字加起来最大. 参考:https://blog.csdn.net/xiaoxiede ...
- lintcode 中等题:N Queens N皇后问题
题目: N皇后问题 n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击.<不同行,不同列,不同对角线> 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案 ...
- Python----递归------Eight Queens 八皇后问题
递归思想是算法编程中的重要思想. 作为初学者,对递归编程表示很蒙逼,每次遇到需要递归的问题,心里就有一万头草泥马飞过~~~~~~(此处略去一万头草泥马) 在B站看数据结构与算法的视频时,视频中给了两个 ...
- [CareerCup] 9.9 Eight Queens 八皇后问题
9.9 Write an algorithm to print all ways of arranging eight queens on an 8x8 chess board so that non ...
- NQueens, NQueens2 N皇后问题,递归回溯
N皇后的规则:任意两个皇后不在同一行,不在同一列,不在同一斜线上. 算法分析:这种问题就用回溯法.深度搜索然后回溯.用一个数组记录每一行皇后的位置,下标代表行,值代表列.对行深度搜索. public ...
- hdu2553 N皇后问题(dfs+回溯)
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Aizu - ALDS1_13_A-8 Queens Problem-八皇后的路径输出
The goal of Queens Problem is to put eight queens on a chess-board such that none of them threatens ...
- 【C/C++】n皇后问题/全排列/递归/回溯/算法笔记4.3
按常规,先说一下我自己的理解. 递归中的return常用来作为递归终止的条件,但是对于返回数值的情况,要搞明白它是怎么返回的.递归的方式就是自己调用自己,而在有返回值的函数中,上一层的函数还没执行完就 ...
随机推荐
- Twenty-seven
侦听器 watch侦听器 watch侦听器允许开发者监视数据 的变化,从而针对数据的变化做特定的操作 语法如下 侦听器的格式 1.方法格式的侦听器 缺点:无法在所进入页面的时候,自动触发!!! ...
- SQLSERVER日期查询(年、月、日、季、周、时、分、秒)
常用日期查询操作 SELECT GETDATE () [当前日期], DATENAME (YEAR, GETDATE ()) [年], DATENAME (MONTH, GETDATE ()) [月 ...
- python翻译(二)
百度翻译,通过设置参数可可以实现翻译为指定语种 baidujs1.js var i = "320305.131321201" function n(r, o) { for (var ...
- 极米投影仪安装apk的方法
https://www.touying.com/t-37871-1.html 方法二:使用U盘安装:1.使用电脑下载软件apk,并将软件apk的后缀修改为"apk1": 2.然后将 ...
- uniapp记录
1.uniapp获取imei imsi 型号 厂商 https://blog.csdn.net/qq_35620498/article/details/112172115
- Java 向上转型
向上转型: 对象的向上转型,其实就是多态写法: 父类名称 对象名 = new 子类名称(); 注意:向上转型一定是安全的,从小范围转向大范围.(从小范围的猫,向上转化为更大范围的动物)
- 【STM32】电能表抄表功能实现|自学笔记
一.抄表的原理 抄表就是读电能表的测量参数,一般有电能,电压,电流,实时功率,功率因数等,用单板抄表其实就是读电能表种相应寄存器中的值.智能电表目前主流协议有DLT645国标各家通用,MODBUS各家 ...
- 简单的js hook
// ==UserScript== // @name ethereum request // @namespace http://tampermonkey.net/ // @version 0.1 / ...
- python 知识点总结
第一张 1)变量 内存空间的表达式 命名要遵守规则 赋值使用 = 2)类型转换 str()将其他类型转成字符窜 int() 将其他类型转成整数 float()将其他类型转成浮点数 3)数据类型 整数类 ...
- cesium开启关闭日照(含有模型)
准备条件:已经完成3Dtiles的导入 和viewer的创建 <script>//开日照 function Bshadows(){ viewer.scene.globe.enableLig ...