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

企业网站数据库表设计yy直播下载电脑版

企业网站数据库表设计,yy直播下载电脑版,怎样自己做淘宝客网站,首页设计公司递归型枚举与回溯剪枝初识 1.枚举子集2.组合型枚举3.枚举排列4.全排列问题 什么是搜索?搜索,是一种枚举,通过穷举所有的情况来找到最优解,或者统计合法解的个数。因此,搜索有时候也叫作暴搜。搜索一般分为深度优先搜索…

递归型枚举与回溯剪枝初识

  • 1.枚举子集
  • 2.组合型枚举
  • 3.枚举排列
  • 4.全排列问题

  1. 什么是搜索?搜索,是一种枚举,通过穷举所有的情况来找到最优解,或者统计合法解的个数。因此,搜索有时候也叫作暴搜。搜索一般分为深度优先搜索(DFS)与宽度优先搜索(BFS)。
  2. 深度优先遍历 vs 深度优先搜索,宽度优先遍历 vs 宽度优先搜索。遍历是形式,搜索是目的。不过,在一般情况下,我们不会去纠结概念的差异,两者可以等同。
  3. 回溯与剪枝
  • 回溯:当在搜索的过程中,遇到走不通或者走到底的情况时,就回头。
  • 剪枝:在搜索过程中,剪掉重复出现或者不是最优解的分。

递归型枚举与回溯剪枝初识:

  • 画决策树
  • 根据决策树写递归

搜索的本质:对决策树进行一次遍历,直到将所有的情况搜集到为止。

1.枚举子集

B3622 枚举子集(递归实现指数型枚举)

在这里插入图片描述

解法:深搜

设一共有 3 人,分别是 1,2,3。「从前往后」考虑每一个人,针对当前这个人「选」或者「不选」,我们可以画出如下「决策树」:

在这里插入图片描述

设计递归函数:

  1. 重复子问题:针对某一位,「选」或者「不选」。因为最终结果要按照「字典序」输出,我们可以「先考虑不选」,然后「再考虑选」。
  2. 实现方式参考代码和注释,结合「决策树」一起看会很清晰。
#include<iostream>
#include<string>
using namespace std;const int N = 11;int n;
string path; //记录递归过程中,每⼀步的决策void dfs()
{if(path.size() == n){cout << path << endl; //path存着前n个⼈的决策 return;}//不选path += 'N';dfs();path.pop_back(); //回溯:恢复现场//选path += 'Y';dfs(); path.pop_back(); //回溯:恢复现场
}int main()
{cin >> n;dfs();return 0;
}

2.组合型枚举

P10448 组合型枚举

在这里插入图片描述

解法:深搜

设 n = 4, m = 3,「从前往后」考虑 3 个位置应该选哪个数,我们可以画出如下决策树:

在这里插入图片描述

设计递归函数:

  1. 重复子问题:当前这一位,应该放哪个数上去。因为这是一个「组合」问题,不涉及排列,所以我们当前位置开始放的数,应该是「上次决策的数的下一位」。
  2. 实现方式参考代码和注释,结合「决策树」一起看会很清晰。
#include<iostream>
#include<vector>
using namespace std;int n, m;
vector<int> path; //记录递归过程中,每⼀步的决策void dfs(int pos)
{if(path.size() == m){for(auto& e : path) cout << e << " ";cout << endl;return;}for(int i = pos; i <= n; i++){path.push_back(i);dfs(i + 1);path.pop_back(); //回溯:恢复现场}
}int main()
{cin >> n >> m;dfs(1);return 0;
}

3.枚举排列

B3623 枚举排列(递归实现排列型枚举)

在这里插入图片描述

解法:深搜

设 n = 3, k = 2,一共要选出两个数,可以依次「考虑要选出来的数」是谁,画出如下决策树:

在这里插入图片描述

设计递归函数:

  1. 重复子问题:考虑这一位要放上什么数。因为是「排列」问题,所以我们直接从 1 开始枚举要放的数。
  2. 剪枝:在这一条路径中,我们「不能选择之前已经选择过的数」,需要用到辅助数组
  3. 实现方式参考代码和注释,结合「决策树」一起看会很清晰。
#include<iostream>
#include<vector>
using namespace std;const int N = 15;int n, k;
vector<int> path; //记录递归过程中,每⼀步的决策
bool vis[N]; //辅助数组:标记哪些数已经选过 void dfs()
{if(path.size() == k){for(auto& e : path) cout << e << " ";cout << endl;return;}for(int i = 1; i <= n; i++){if(vis[i] == false){vis[i] = true;path.push_back(i);dfs();//回溯:恢复现场path.pop_back();vis[i] = false;}}
}int main()
{cin >> n >> k;dfs();return 0;
}

4.全排列问题

P1706 全排列问题

在这里插入图片描述

解法:深搜

跟上一道题的决策一样,我们可以枚举每一位应该放上什么数,只不过少了 k 的限制。剪枝的策略还是一样的,那就是在路径中,「不能选择之前已经选过的数」。

在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;const int N = 15;int n;
vector<int> path; //记录递归过程中,每⼀步的决策
bool vis[N]; //辅助数组:标记哪些数已经选过void dfs()
{if(path.size() == n){for(auto& e : path) printf("%5d", e);cout << endl;return;}for(int i = 1; i <= n; i++){if(vis[i] == false){vis[i] = true;path.push_back(i);dfs();//回溯:恢复现场path.pop_back();vis[i] = false;}}
}int main()
{cin >> n;dfs();return 0;
}
http://www.yayakq.cn/news/279884/

相关文章:

  • c2c网站都有哪些怎样创建网站赚钱
  • 手机网站建设免费wordpress运行很慢
  • 网站建设工作部署会如何搭建网站教程
  • 增加网站访客做礼品公司网站的费用
  • drupal7建站教程上海高新企业名单查询
  • 谁有网站备案号南昌网站建设行业现状
  • psd简单的网站首页上海招聘网最新招聘信息网
  • 湖南乔口建设公司网站为什么淘宝店主不自己做电商网站
  • 网站建设痛点软件开发工具有哪些基本功能
  • 自已建设网站流程怎么建设宣传网站
  • 网站做seo安全吗photoshop下载免费版
  • 怎么做一直弹窗口网站手机软件开发用什么语言
  • 网站建设相关书籍赣州市开发小程序
  • 个体户可以网站备案吗wordpress中文章
  • win7用本地文件做网站模板网站不显示内容
  • 格力网站的建设情况wordpress菜单小图标不显示
  • 宁波网站建设公司在哪里网页设计代码下载
  • 做网站的流程是怎么样的在线设计制作
  • 电商网站 手续ftp上传php网站
  • 江苏省工程建设协会网站wordpress建站好吗
  • 广州做网站seo二级域名前缀大全
  • 淮安市建设银行网站怎么用织梦做本地网站
  • 沈阳建站费用中文商城响应式html网站模板
  • 中国的网站域名食品网站建设书
  • 昆明市建设厅网站网站注册属于自己的网站
  • 开网站建设公司赚钱吗公司网页宣传
  • 网站建设软件是什么意思网站的建设费用预算
  • 网站添加关键词风中有朵雨做的云电影网站
  • 企业信息型网站有哪些电商网站建设培训学校
  • 接给别人做网站的活国家企业公示信息系统(全国)官网