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

回溯法是一种选优搜索法,按选优条件向前搜索,以达到目的。但是当探索到某一步时,发现原先选择并不优或者达不到目标,就退一步重新选择,而满足回溯条件的某个状态的点称为“回溯点”

许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。

基本思想:

在包含问题的所有解的空间树中,按照深度优先搜索的策略,从根节点出发深度搜索解空间树。当探索到某一节点时,要先判断

该节点不包含问题的解,则逐层向其祖先节点回溯,其实回溯法就是对隐式图的深度优先搜索算法。

若用回溯法求问题的所有解时,要回溯到跟,且根节点的所有可行的子树都要已被搜索遍才结束。

而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。

二.回溯法典型:

1.八皇后问题

问题;八皇后问题是一个以国际象棋为背景的问题,如何能够在8*8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行,总行或斜线上。

转化规则:

 #include <iostream>
#include <algorithm>
#include <iterator>
#include <vector> using namespace std; //位置冲突算法
bool isMeet(int a[], int n)//a[]位置数组,n皇后个数
{
for (int i = ; i <= n; ++i)//i:位置
for (int j = ; j < i; ++j)//j:位置
if ((a[i] == a[j]) || (abs(a[i] - a[j]) == i - j))//1:在一行;2:在对角线上
return false; //冲突
return true;//不冲突
}
//八皇后:枚举算法 //主函数
int main()
{
int a[] = { }; //用于记录皇后位置:(第0行0列我们不用)。如:a[3] = 4;表示第3列第4行位置有皇后
int count = ; //用于计数 for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
for (a[] = ; a[] <= ; ++a[])
{
if (!isMeet(a, ))//如果冲突,则继续枚举
continue;
else
++count;
}
cout << count << endl;
system("pause");
return ;
}

回溯算法 LEETCODE别人的小结 一八皇后问题的更多相关文章

  1. 20191030-带返回值的回溯算法Leetcode解数独

    题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔 ...

  2. 剑指Offer——回溯算法

    剑指Offer--回溯算法 什么是回溯法 回溯法实际是穷举算法,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最优解,则返回上一种状态继续穷举.回溯法有"通用的解题法"之 ...

  3. Python解决八皇后问题

    最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...

  4. LeetCode 回溯法 别人的小结 八皇后 递归

    #include <iostream> #include <algorithm> #include <iterator> #include <vector&g ...

  5. 『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1.5 Checker Challenge 八皇后升级版)

    本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...

  6. LeetCode 31:递归、回溯、八皇后、全排列一篇文章全讲清楚

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天我们讲的是LeetCode的31题,这是一道非常经典的问题,经常会在面试当中遇到.在今天的文章当中除了关于题目的分析和解答之外,我们还会 ...

  7. LeetCode:回溯算法

    回溯算法 这部分主要是学习了 labuladong 公众号中对于回溯算法的讲解 刷了些 leetcode 题,在此做一些记录,不然没几天就忘光光了 总结 概述 回溯是 DFS 中的一种技巧.回溯法采用 ...

  8. 回溯算法-C#语言解决八皇后问题的写法与优化

    结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...

  9. 算法——八皇后问题(eight queen puzzle)之回溯法求解

    八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...

随机推荐

  1. 关于ES6的一些新特性的学习

    一.关于变量 ES5 1.只有全局作用域变量和函数作用域变量 2.“变量提升”(当程序进入一个新的函数时,会将该函数中所有的变量的声明放在函数开始的位置.仅仅会提升变量的声明,不会提升变量的赋值) E ...

  2. MySQL学习(八)

    连接查询 1 集合的特点:无序性,唯一性 集合的运算:求并集,求交集,求笛卡尔积 表和集合的关系 一张表就是一个集合,每一行就是一个元素 疑问:集合不能重复,但我有可能两行数据完全一样 答:mysql ...

  3. MarkerOpter marker操作类

    构造函数:MarkerOpter=function(p_params): p_params={} 参数描述: p_params.layer; // markerlayer p_params.imgUr ...

  4. Java通过ftp上传文件

    首先,pom.xml添加引用 <dependency> <groupId>commons-net</groupId> <artifactId>commo ...

  5. Axure XMind整理交互思路

    本部分主要是为了研究Xmind思维导图总结设计原型的思路

  6. echarts画多条一元回归线

    理论上两点一线,只要两个点即可 option = { title: { text: '', left: 'center' }, tooltip: { // trigger: 'item', // fo ...

  7. C#复习题(概念) --C#学习笔记

    第一章 1.公共语言架构(CLI)由哪几部分组成? (1)通用类型系统:定义了一套类型系统的框架,规定了数据类型的声明.使用和管理方法. (2)公共语言规范:一组语言规则的集合 (3)通用中间语言:一 ...

  8. VA&RVA 和 RVA to RAW

    VA&RVA VA指的是进程虚拟内存的绝对地址,RVA(Relative Virtual Address,相对虚拟地址)指从某个基准位置(ImageBase)开始的相对地址.VA与RVA满足下 ...

  9. Android 和 JS交互方法初探

    起初有个需求,就是需要监听网页的图片点击,然后图片单独跳转到另一个页面单独显示 这里就需要用JS和Android Native方法之间的通信 先说上面的解决办法之前先引出两个Android的方法 1: ...

  10. BAT 大规模Hadoop集群实践

    百度高级架构师马如悦:我的Hadoop 2.0 http://www.csdn.net/article/2011-04-28/296869 腾讯大规模Hadoop集群实践 腾讯 hadoop 基线版本 ...