package com.dym;public class Queens {public static void main(String[] args) {// TODO Auto-generated method stubnew Queens().placeQueens(4);}/*** 数组索引是行号,数组元素是列号*/int[] cols;/*** 一共有多少种摆法*/int ways;void placeQueens(int n) {if (n < 1) return;cols = new int[n];place(0);System.out.println(n + "皇后一共有" + ways + "种摆法");}/*** 从第row行开始摆放皇后* @param row*/void place(int row) {if (row == cols.length) {ways++;show();return;}for (int col = 0; col < cols.length; col++) {if (isValid(row, col)) {// 在第row行第col列摆放皇后cols[row] = col;place(row + 1);}}}/*** 判断第row行第col列是否可以摆放皇后*/boolean isValid(int row, int col) {for (int i = 0; i < row; i++) {// 第col列已经有皇后if (cols[i] == col) {
//              System.out.println("[" + row + "][" + col + "]=false");return false;}// 第i行的皇后跟第row行第col列格子处在同一斜线上if (row - i == Math.abs(col - cols[i])) {
//              System.out.println("[" + row + "][" + col + "]=false");return false;}}
//      System.out.println("[" + row + "][" + col + "]=true");return true;}void show() {for (int row = 0; row < cols.length; row++) {for (int col = 0; col < cols.length; col++) {if (cols[row] == col) {System.out.print("1 ");} else {System.out.print("0 ");}}System.out.println();}System.out.println("------------------------------");}
}

N皇后的问题——算法的思想:回溯和剪枝相关推荐

  1. 程序员都会的五大算法之四(回溯算法),恶补恶补恶补!!!

    前言 点击查看算法介绍 五大算法 分治算法 动态规划 贪心算法 回溯算法 分支限界算法 WX搜素"Java长征记"对这些算法也有详细介绍. 回溯算法 一.算法概述 回溯算法是一种择 ...

  2. 回溯 皇后 算法笔记_回溯算法:N皇后问题

    给「代码随想录」一个星标吧! ❝ 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便 ...

  3. (十五)算法设计思想之“回溯算法”

    算法设计思想之"回溯算法" 回溯算法是什么? 什么问题适合用回溯算法解决? 适合回溯算法解决的问题 全排列 LeetCode:46.全排列 LeetCode:78.子集 思考题 回 ...

  4. 回溯法采用的搜索策略_五大常用算法之四:回溯法

    1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向 ...

  5. 算法训练Day24 | 回溯算法理论基础;LeetCode77.组合(经典的回溯问题)

    目录 回溯算法理论基础 1. 什么是回溯法 2. 回溯法的效率 3. 回溯法解决的问题 4. 如何理解回溯法 5. 回溯法模板-- 回溯三部曲 6. 总结 LeetCode77.组合 1. 思路 2. ...

  6. 算法笔记之回溯法(一)——溯洄从之,道阻且长;溯游从之,宛在水中央。

    回溯法理论基础 回溯法是一种搜索算法,从本质上来说,回溯法是一种穷举法,穷尽其所有可能而举其可行解:尽管回溯法有剪枝等操作,但也只是去除一些明显不可行的部分,仍改变不了回溯法暴力搜索的本质. 虽然回溯 ...

  7. 算法——回溯与剪枝(Backtracking and pruning)

    算法之回溯与剪枝(Backtracking and pruning) 思想:将回溯法与分支限界法原理结合.应用访问,用剪枝来排除不满足解的情况来提高算法的执行效率 算法总结:回溯法的优点是可以遍历所有 ...

  8. 卡尔曼算法笔记---思想和实际应用物理含义的理解

    此片blog的目的是理解卡尔曼算法的思想和实际应用的物理含义,想法很好,却只能理解冰山一角,先记下这一角 另本blog参考卡尔曼滤波 -- 从推导到应用和徐亦达卡尔曼推导视频 首先认识卡尔曼算法在数学 ...

  9. C++N queensN皇后的优化算法(附完整源码)

    N queensN皇后的优化算法 N queensN皇后的优化算法的完整源码(定义,实现,main函数测试) N queensN皇后的优化算法的完整源码(定义,实现,main函数测试) #includ ...

最新文章

  1. newman的键盘不错
  2. 2020 我的C++学习之路 C++PrimerPlus第十一章课后习题
  3. 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...
  4. LeetCode 113. 路径总和 II(回溯)
  5. 基于TableStore的数据采集分析系统介绍 1
  6. dos命令 cd命令使用说明[图文说明]
  7. 实现多线程的几种方式
  8. Android 修改actionbar标题的颜色和背景色
  9. 网络信息安全基本属性
  10. python一元线性回归算法_手写算法—Python代码实现一元线性回归
  11. FastDFS使用之文件名称
  12. Excel PivotTable 使用心得手顺分享(五)
  13. Facebook成为美国四大电视台争夺观众阵地
  14. JAVAWEB学习笔记--Day3
  15. 戴眼镜总是不舒服,你的眼镜真的适合你吗?
  16. 时隔一个多月发布原生一体化云安全产品,ZStack的发展还可以更快
  17. 23年浙江双非计算机第四保研浙大四个月心路历程|保研经验|递补上岸浙软
  18. 管家婆辉煌版常见理解性问题
  19. 【STM32】定时器中断原理及操作
  20. 如何跳过服务器密码进入系统,FTP服务器如何不用密码便可登陆

热门文章

  1. post提交的数据几种编码格式
  2. 通过poi操作ppt中的图片
  3. [js]设计模式小结对原型的修改
  4. 函数进阶学习之二 声明 定义
  5. JavaScript- 省市联动代码
  6. HTML5中的CSS Shader技术
  7. Eclipse如何生成jar包
  8. wince下实现GPRS上网,程序控制拨号 .
  9. oracle 连接池sql跟踪,实现SQLServer、MySQL和oracle数据库连接池
  10. N6-旋转数组的最小元素