当前位置: 首页 > wzjs >正文

青岛 网站维护免费模板网站

青岛 网站维护,免费模板网站,网站导航设计模板,温州网页制作设计零.参考视频!安利!!! 带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili 一.回溯法可以解决的问题 1.排列 2.组合 3.分割 4.子集 5.棋盘 二.回溯法的模板 我的理解:…

零.参考视频!安利!!!

带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili

一.回溯法可以解决的问题

1.排列

2.组合

3.分割

4.子集

5.棋盘

二.回溯法的模板

我的理解:

1.首先命名函数名为backtracking

2.按需求放入需要的参数

3.回溯算法是离不开递归的,而递归算法必要的就是它的退出条件

        if(终止条件)

        {

           收集结果

            return;

       }

4.处理完这一层的数据之后,我们要处理下面的节点

       for(节点元素)

       {

           处理节点

5.处理完当前节点后需要递归到下一层

       for(节点元素)

       {

           处理节点

           递归函数

6.我们找寻找我们需要的结果的时候,遇到需要回溯的情形了,我们要进行对应的回溯

       for(节点元素)

       {

           处理节点

           递归函数

           回溯操作

       }

vector<> res; // 用于存放最后结果
vector<> path; // 用于存放每一次最外层 for 循环产生的结果
void backtracking(参1:题目中的数组,参2:结束循环的变量,参3:第n层 for 循环从谁开始,也就是子数组的开始位置,是一直变化的) { // 参数中要有一个值控制树的深度
    if (终止条件) { 
        // 这里控制 for 循环是几重 for 循环,并返回上一层 for 循环
        存放结果; // 将哪些变量添加到 res 
        return;
    }

    for (int i = 子数组在哪开始;i<要对哪些数进行遍历,并进行相关剪枝操作;i++) {  // 控制最外层 for 循环递归多少次
        // TODO 该元素在 push 之前的相关操作
        path.push_back(i); // 将 i 添加到 path 中
        backtracking(参1:题目中的数组,参2:结束循环的变量,参3:第n层 for 循环从谁开始); // 递归
        // TODO 该元素在弹出之前的相关操作
        path.pop_back();
    }
}


三.具体问题

问题:全排列问题

问题描述
给定一个整数 n,生成由 1 到 n 组成的所有不重复的数字序列,每行一个序列,每个数字保留 5 个场宽。

输入输出样例

  • 输入:3

  • 输出:

    复制

    1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1

解题思路

这是一个典型的全排列问题,可以通过回溯法解决。具体步骤如下:

  1. 使用深度优先搜索(DFS)逐步构建排列。

  2. 使用一个标记数组 hx 来记录每个数字是否已经被使用,避免重复选择。

  3. 在递归过程中,每次选择一个未使用的数字加入当前排列,并递归调用。

  4. 递归返回后,取消标记,以便尝试其他可能的排列。

Coding:蓝桥杯模板:排列型模板

//生成从1到n的全排列

Coding:

#include<iostream>

using namespace std;

int n;//共计n个数
int order[20];
bool chosen[20];

void calc(int k)//生成从 1 到 n 的所有全排列
{
    if (k == n + 1)//递归终止条件
    {
        for (int i = 1;i <= n;i++)
        {
            cout << order[i] << "";
        }
        puts("");
        return;
    }
    for (int i = 1;i <= n;i++)//尝试所有可能的数字
    {
        if (chosen[i])//检查数字是否已被使用
        {
            continue;
        }
        order[k] = i;//选择数字并标记
        chosen[i] = 1;
        calc(k + 1);//递归生成下一个位置的排列
        chosen[i] = 0;//回溯操作
        order[k] = 0;
    }
}

int main()
{
    // 从用户输入中读取 n 的值
    cout << "请输入 n 的值: ";
    cin >> n;
    // 从第一个位置开始生成排列
    calc(1);
    return 0;
}

Coding:DFS搜索回溯算法

http://www.dtcms.com/wzjs/806142.html

相关文章:

  • 寻找郑州网站建设公司九游下载安装载
  • 岳西县建设局网站网站备案快吗
  • 二级网站都在一台服务器怎么做域名朝阳区的互联网公司
  • 苏州高端网站建设公司哪家好网络维护服务合同
  • 网站如何做一张轮播图上海开发公司
  • 标准网站建设报价单discuz主题
  • 网站你懂我意思正能量晚上在线观看不用下载免费电子商务网站系统规划
  • 做网站 seo郑州建网站价格
  • 海外网站cdn加速下载潍坊网站建设排行
  • 微信小程序商家版郑州网站优化哪家专业
  • 网站建设肆金手指排名9做网站备案都需要什么东西
  • 姜堰网站定制数字营销的概念
  • 滴滴优惠券网站怎么做的响应式网站和普通网站
  • 网站备案及管理的授权书广安做网站的公司
  • 费县住房和城乡建设局网站深圳网站建设外包公司
  • 宇舶手表网站电子商务网站建设及其相关法律问题
  • 上海做网站建设公司排名手机网站建站工作室
  • 重庆建设工程造价管理协会网站wordpress 知名网站
  • 广东省城乡住房建设厅网站首页试用型网站怎么做
  • wordpress网站源码分享织梦dedecms电影网站模板
  • 自己做网站传视屏做扎染的网站
  • 厦门市建设厅网站wordpress+高性能
  • 网站建设 网站内容 采集中国企业500强排名一览表
  • 网站开发语言php5.1wordpress 下载弹出插件
  • 达州网站建设哪家好德州品牌策划公司
  • 建外文网站淘宝客推广
  • 网站流量消耗计算php网站开发实践
  • 交互设计产品有哪些东莞做网站优化天助网络
  • 网站开发老是弹广告app定制开发制作
  • 平潭建设局网站手机下载视频网站模板下载失败