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皇后)问题的简单回溯的更多相关文章

  1. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...

  2. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案

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

  3. UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索

    UVa 167 题意:八行八列的棋盘每行每列都要有一个皇后,每个对角线上最多放一个皇后,让你放八个,使摆放位置上的数字加起来最大. 参考:https://blog.csdn.net/xiaoxiede ...

  4. lintcode 中等题:N Queens N皇后问题

    题目: N皇后问题 n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击.<不同行,不同列,不同对角线> 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案 ...

  5. Python----递归------Eight Queens 八皇后问题

    递归思想是算法编程中的重要思想. 作为初学者,对递归编程表示很蒙逼,每次遇到需要递归的问题,心里就有一万头草泥马飞过~~~~~~(此处略去一万头草泥马) 在B站看数据结构与算法的视频时,视频中给了两个 ...

  6. [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 ...

  7. NQueens, NQueens2 N皇后问题,递归回溯

    N皇后的规则:任意两个皇后不在同一行,不在同一列,不在同一斜线上. 算法分析:这种问题就用回溯法.深度搜索然后回溯.用一个数组记录每一行皇后的位置,下标代表行,值代表列.对行深度搜索. public ...

  8. hdu2553 N皇后问题(dfs+回溯)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. 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 ...

  10. 【C/C++】n皇后问题/全排列/递归/回溯/算法笔记4.3

    按常规,先说一下我自己的理解. 递归中的return常用来作为递归终止的条件,但是对于返回数值的情况,要搞明白它是怎么返回的.递归的方式就是自己调用自己,而在有返回值的函数中,上一层的函数还没执行完就 ...

随机推荐

  1. 学习-自增id++的问题

    代码示例: let id = 0   const todos = ref([   { id: id++, text: 'Learn HTML' },   { id: id++, text: 'Lear ...

  2. 如何快速下载xcode等官方app

    为了避免xcode ghost类的风险,用app store又是如此的卡,如何解决呢? https://developer.apple.com/downloads/ 这里各种版本的下载. 绝对官方签名 ...

  3. c++初始化和赋值的区别

    静态对象的声明及初始化不是赋值 声明(并缺省初始化)后再赋值 #include <iostream> #include <string> void fun(std::strin ...

  4. 安装fearch

    sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-daily sudo apt-get update sudo apt-get inst ...

  5. db2iupgrade / db2ckupgrade failure due to SQL0551N

    db2iupgrade / db2ckupgrade failure due to SQL0551N Troubleshooting Problem db2iupgrade or db2ckupgra ...

  6. 2022-4-7内部群每日三题-清辉PMP

    1.公司聘用一名项目经理来协调一个期限紧迫的敏捷项目,项目经理和敏捷团队都由一位项目组合经理管理,该项目组合经理倾向于根据需要将开发人员重新分配给其他紧急事项,当项目经理与其接洽时,项目组合经理坚持认 ...

  7. PAT-basic-1026 程序运行时间 java

    一.题目 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间.这个时间单位是 c ...

  8. 【SQL Server】列名首字母大写

    使用UPPER 和 LOWWER函数组合首字母大写.例如: 1 SELECT user_id,(UPPER(LEFT(name,1) ) + RIGHT(name , LEN(name) -1) )A ...

  9. Taro 弹窗阻止小程序滑动穿透(亲测有效) tabbar数据缓存不更新 入口场景值不同

    v3.0 推出后反馈最多的问题之一,就是在 touchmove 事件回调中调用 e.stopPropagation() 并不能阻止滑动穿透. 这是因为 Taro 3 的事件冒泡机制是单独在小程序逻辑层 ...

  10. 渗透测试工具&导航合集

    #前言 表哥们一般都有自己强大的工具库,今天我也稍作整理,分享交流出来一部分 #信息收集 ####dirbuster kali自带的一款工具,fuzz很方便 ####gorailgun 一款自动化做的 ...