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

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

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

基本思想:

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

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

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

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

二.回溯法典型:

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. 《剑指offer》第五十五题(平衡二叉树)

    // 面试题55(二):平衡二叉树 // 题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中 // 任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. #includ ...

  2. 学习笔记15—Python 存储集

    1. save using pickle      with open('F:/BrainAging/result/ordered_data_final_just_TD_leaveOne.pickle ...

  3. Qt5获取本机网络信息

    获取本机网络信息 在pro文件中加入如下代码 QT += network widget.h中的代码如下 #ifndef WIDGET_H #define WIDGET_H #include <Q ...

  4. powerdesiger 导入sqlserver 方法

    https://jingyan.baidu.com/album/7f766daf465e9c4101e1d0d5.html

  5. compile FFMPEG under windows

    这个文章应该算是中文版最好的了.但是还有一些需要修正. 特别是winsock2的处理 win10 msys2 vs2015 ffmpeg3.2.2 编译 这个英文版的才是最好的 Building ff ...

  6. Fat jar用途

    1.Fat jar用途 我们都知道默认的eclipse下打包jar时,是无法连同外部引用包一起打包的.所以一般我们可以自己编写MINIFEST.MF文件来手动将需要的jar包加入进来,但是这样对于引用 ...

  7. English trip M1 - PC1 Are you a Model? 你是模特吗? Teacher:Taylor

    In this lesson you will learn to talk about jobs. 课上内容(Lesson) What's your partner name? Her name is ...

  8. LeetCode--434--字符串中的单词数

    问题描述: 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is Joh ...

  9. lanmp环境中php版本的升级为7.1

    查看php版本的信息 vim  ./lib/phps.sh 设置权限   chmod 755 ./lib/phps.sh 下载版本  ./lib/phps.sh  7.1.4 查看版本 php -v ...

  10. Digital Deletions HDU - 1404

    Digital deletions is a two-player game. The rule of the game is as following. Begin by writing down ...