| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> c++dfs详解 -> 正文阅读 |
|
[数据结构与算法]c++dfs详解 |
目录 一、dfs就是通过树建立起来的深度优先搜索,也就是树的先序遍历 二、如何使用1.重要性相信不会有人质疑他的用处,一个搜索玩得好的选手,可能所有题都不是他的对手。 有诗如此: 暴搜挂着机,打表出省一。偏分过样例,暴力出奇迹。 转载链接:https://www.cnblogs.com/ljy-endl/p/11337154.html 但搜索也不是那么好搜的,O(n^n)的复杂度就问你怕不怕 2.优化策略常见的优化策略:可行性剪枝、最优性剪枝、搜索顺序剪枝、去除等效冗余、记忆化搜索 这里不讲记忆化搜索,因为那是bfs里的 剪枝深搜,它的进程近似一颗树。 而剪枝就是一种生动的比喻:把不会产生答案的,或不必要的枝条“剪掉”。 剪枝的关键就在于剪枝的判断:什么枝该剪,什么枝不该剪,在什么地方减。 这就是剪枝的原则: 正确性,准确性,高效性。 1.可行性剪枝最常见的就是去重,标记数组控制状态节点是否被访问 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 2.最优性剪枝最优性剪枝一般是处理最优解的问题。 3.搜索顺序剪枝例如数独问题,通过选择搜索顺序,可以确定某些状态结点,从而减少子状态结点的扩展 去除等效冗余搜索的不同分支,最后的结果是一样的,那么只搜一个分支就够了。 三、例题1.全排列问题输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字,输出按字典序排列。 输入格式: 一个整数 n。 输出格式: 由 1~n 组成的所有不重复的数字序列,每行一个序列。 每个数字保留 5 个宽度。 限制: 空间限制:128MByte 样例: 输入: 3 输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 提示: 1≤n≤9 此题非常的经典,只需要判断一下,去个重,剩下的照常就行 代码如下:
2.砝码称重设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000)。 现在给你这六种砝码的数量,请你计算用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况。 如输入:1 1 0 0?0 0 输出:Total=3 ?表示可以称出1g,2g,3g三种不同的重量。 输入格式: 每个测试文件只包含一组测试数据,每组输入六个整数,例如: 输入?a1? a2? a3? a4? a5? a6 (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个) 输出格式: 对于每组输入数据,输出?Total=N。(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况) 限制: 空间限制:125MByte 时间限制:1秒 样例: 输入: 1 1 0 0 0 0 输出: Total=3 此题比上题稍微难一些,需要同时记住到了哪里以及数量,所以用for循环循环数量,递归递归位置,再将重量标记一下就行了 代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:27:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |