是使用递归方法实现回溯算法的,在第一次使用二维矩阵的情况下,又做了一次改一维的优化

但是算法效率仍然差强人意,因为使用递归函数的缘故

下面提供另一种回溯算法的实现,使用数据结构”栈“来模拟,递归函数的手工实现,因为我们知道计算机在处理递归时的本质就是栈

时间复杂度是一样的,空间复杂度因为自定义了class,有所上升

经过测试其性能甚至低于上篇博客的递归实现

权当是使用数据结构”栈“,解决15皇后的代码如下:

package com.newflypig.eightqueen;import java.util.Date;
import java.util.Stack;/*** 使用数据结构“栈”,模拟递归函数* 实现非递归方案的回溯算法* @author newflydd@189.cn* Time: 2015年12月31日 下午6:13:05*/
public class EightQueen3 {private static final short N=15;public static void main(String[] args){Date begin =new Date();long count=0;/***  初始化栈和棋盘,并向栈中压入第一张初始化的棋盘*/Stack<Chess> stack=new Stack<Chess>();short[] chessData=new short[N];

8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现相关推荐

  1. 【C语言】算法学习·回溯算法

    目录 一.全排列问题 二.N 皇后问题 三.最后总结 回溯算法基本框架 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也 ...

  2. 一文了解贪心算法和回溯算法在前端中的应用

    一文了解贪心算法和回溯算法在前端中的应用 一.贪心算法 1.贪心算法是什么? 2.应用场景 3.场景剖析:零钱兑换 二.回溯算法 1.回溯算法是什么? 2.什么问题适合选用回溯算法解决? 2.应用场景 ...

  3. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  4. 常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)

    博主联系方式: QQ:1540984562 微信:wxid_nz49532kbh9u22 QQ交流群:892023501 目录 1.穷举法 2.贪心算法 3.递归与分治算法 4.回溯算法 5.数值概率 ...

  5. 回溯算法和贪心算法_回溯算法介绍

    回溯算法和贪心算法 回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or som ...

  6. C++算法学习(回溯算法)

    回溯算法 1.目标 2.方法 3.具体思路 4.例题 (1)[力扣:10. 正则表达式匹配](https://leetcode-cn.com/problems/regular-expression-m ...

  7. java回溯算法_回溯算法讲解--适用于leetcode绝大多数回溯题目

    什么是回溯算法? 回溯法是一种系统搜索问题解空间的方法.为了实现回溯,需要给问题定义一个解空间. 说到底它是一种搜索算法.只是这里的搜索是在一个叫做解空间的地方搜索. 而往往所谓的dfs,bfs都是在 ...

  8. 【算法】回溯算法+进阶题——全排列Ⅱ、组合总和Ⅱ、解数独

    目录 一.前言 • 什么是回溯算法 • 用回溯能解决那些题型 二.总体思路 1. 通过树逐层解剖 2. 代码框架 3. 是否需要去重 三.例题 1. 组合总和Ⅱ 2. 全排列Ⅱ 3. 解数独 一.前言 ...

  9. python回溯算法_回溯算法经典问题及python代码实现

    2. 0-1背包问题 # 0-1 bag problem import sys def f(no, cur_mass, things, num): global cur_max if no == nu ...

  10. 常用十大算法_回溯算法

    回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...

最新文章

  1. linux音频驱动dma数据,Linux音频驱动简述
  2. 用计算机a 3如何定义,计算机绘图A 3次.doc
  3. java 初始化二维数组_java二维数组的常见初始化
  4. m.2接口和nvme区别_M.2硬盘的分类和区别
  5. 修改onlyoffice存储为手动存储关闭浏览器时不进行保存
  6. mql 查询多结果_明世告诉你!广东成考成绩、录取结果怎么查?(附最低分数线)...
  7. SharePoint 2013 Preview Single Server 评估环境安装与简单试用
  8. Git生成并添加SSH key[并添加到Github]
  9. 解决主页被劫持的dos脚本
  10. QT 网络编程之https
  11. Tkinter教程之Frame篇
  12. 推荐25个值得收藏的前端开源Awesome项目
  13. Android播放音效
  14. 将示波器数据传入电脑用matlab作FFT
  15. 回首神仙地,还道人间好
  16. 量化交易 聚宽 布林带策略
  17. 服务器 系统打补丁,2019服务器系统打补丁方法
  18. 南阳理工学院ACM多乐赛暨16级退役纪念赛 A 食堂的座位
  19. 如何选择一个适合自己的创业项目,赚取人生的第一桶金
  20. 康永,给残酷社会的善意短信

热门文章

  1. 容器源码解析之容器全貌(一)
  2. spark-jar冲突解决方案
  3. 洛谷——P1328 生活大爆炸版石头剪刀布
  4. python采用面向对象编程模式吗_在python中,面向对象还有用吗?
  5. 模拟k8s项目的生命周期
  6. 计算机应用基础在powerpoint中,计算机应用基础PowerPoint习题1
  7. Linux内核判断大小端,linux kernel 如何处理大小端
  8. STM32 CAN错误管理
  9. java什么时候新建进程_创建名为“ {java}”的线程(即轻量级进程)是为了什么?...
  10. linux 误删除mysql表能恢复吗,Linux中误删除数据文件和归档日志的恢复方法