回溯算法

2021-01-16 01:15

阅读:734

标签:通用   public   mic   攻击   一个   tco   解决   ima   his   

回溯算法是一种尝试搜索求解的过程,当发现当前条件已经不满足求解的条件时就返回上一次的状态——回溯。

尝试别的路径,直至求出问题的解。有很多地方都用到了回溯的思想,算是一种“通用解”。

回溯法的一般步骤:

  1. 确定问题的解
  2. 确定边界
  3. 确定搜索规则
  4. 确定解所需要的条件

代码框架

bool Search(...)
{
    if(/*边界和解条件*/)
    {
        /*清除状态,回溯*/
        return false;
    }
    /*状态标记*/
    
    /*深度递归*/
    Search(...);
    
    /*得出解或者全部遍历完成后结束遍历*/
    return true;
}

N皇后

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

技术图片

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q‘ 和 ‘.‘ 分别代表了皇后和空位。

示例:

输入: 4
输出: [
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。

题目来源:https://leetcode-cn.com/problems/n-queens/

参考代码:

class Solution {
public:
    vector> solveNQueens(int n) {
        vectormap(n,string(n,‘.‘));
        swap(this->map,map);
        res.clear();
        this->n=n;
        dfs(0);
        return res;
    }
private:
    vector>res;
    vectormap;
    int n=0;
    bool isQueens(int y,int x){
        int base_11= (y-x)>0?y-x:0;
        int base_12= (x-y)>0?x-y:0;
        int base_21= (y+x)=0&&list=0&&line=0&&list=0&&line=n){
            res.push_back(map);
            return;
        }
        for(int i=0;i

回溯算法

标签:通用   public   mic   攻击   一个   tco   解决   ima   his   

原文地址:https://www.cnblogs.com/xiao--ge/p/12932537.html


评论


亲,登录后才可以留言!