




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计培训之5:搜索算法袁辉勇2019年4月20日 一个从起始状态到达目标状态包含多步操作,一个从起始状态到达目标状态包含多步操作,而每一步操作又有几种可能,只有正确的操作才能而每一步操作又有几种可能,只有正确的操作才能达到目标如八皇后问题),这样的问题可以看做达到目标如八皇后问题),这样的问题可以看做是一个树。是一个树。如果按照如果按照1-2-4-5-3-6-71-2-4-5-3-6-7的顺序,叫深度优先的顺序,叫深度优先(DFS)(DFS)如果按照如果按照1-2-3-4-5-6-71-2-3-4-5-6-7的顺序,叫广度优先的顺序,叫广度优先(BFS)(BFS)1 12 23 34 45
2、 56 67 7一、概述一、概述void DFS(int k) /处理第处理第k步步 if (k=n) /已经处理到第已经处理到第n步,到达目的状态步,到达目的状态 输出结果输出结果 else /处理第处理第k步步 for (int i=1; i=m; i+) /第第k步中有步中有m种可能种可能 处理第处理第k步步 DFS(k+1);/进入第进入第k+1步步 二、深度优先二、深度优先(DFS)模板模板1:输出输出1-m个数中取个数中取n个数的所有多重排列。例如个数的所有多重排列。例如n=2,m=3的所有多重排列为:的所有多重排列为:1 11 21 32 12 22 33 13 23 3例例1:
3、多重排列问题:多重排列问题/从从1到到m中取中取n个数,允许重复取数个数,允许重复取数#include using namespace std;int n,m, a10;void DFS(int k) if (k=n) for (int i=0; in; i+) coutai ; coutendl; else for (int i=1; imn; DFS(0); return 0; 输出输出1-m个数中取个数中取n个数的所有排列。例如个数的所有排列。例如n=2,m=3的所有排列为:的所有排列为:1 21 32 12 33 13 2例例2:排列问题:排列问题/从从1到到m中取中取n个数,不允许重
4、复取数个数,不允许重复取数#include using namespace std;int n,m, a10; bool bz10;void DFS(int k) if (k=n) for (int i=0; in; i+) coutai ; coutendl; else for (int i=1; imn; DFS(0); return 0; /从从1到到m中取中取n个数,不允许重复取数,即排列方法个数,不允许重复取数,即排列方法2#include using namespace std;int n,m, a10;void DFS(int k) if (k=n) for (int i=0;
5、in; i+) coutai ; coutendl; else for (int i=k; imn; for (int i=0; im; i+) ai=i+1; DFS(0); return 0; 输出输出m个数中取个数中取n个数的所有组合。例如个数的所有组合。例如m=5,n=3的所有组合为:的所有组合为:1 2 31 2 41 2 5 1 3 41 3 51 4 5 2 3 42 3 52 4 5 3 4 5例例3:组合问题:组合问题#includeusing namespace std;int m,n,a10; /存放每个数存放每个数void comb(int k)if ( kn ) fo
6、r (int i=1; i=n;i+)printf(%5d,ai);printf(n); elsefor (int i=ak-1+1; i=m-n+k; i+)ak=i; comb(k+1); int main( ) scanf(%d%d,&m,&n);comb(1); /从第从第1个数开始个数开始 void DFS(int k) /处理第处理第k步步 for (int i=1; i=m; i+) /第第k步中有步中有m种可能种可能 处理第处理第k步步 if (k=n) /已经处理完已经处理完n步,到达目的状步,到达目的状态态 输出结果;输出结果; return; DFS(k+
7、1);/进入第进入第k+1步步 二、深度优先二、深度优先(DFS)模板模板2:输出输出1-m个数中取个数中取n个数的所有多重排列。例如个数的所有多重排列。例如n=2,m=3的所有多重排列为:的所有多重排列为:1 11 21 32 12 22 33 13 23 3例例1:多重排列问题:多重排列问题/从从1到到m中取中取n个数,允许重复取数个数,允许重复取数#include using namespace std;int n,m, a10;void DFS(int k) for (int i=1; i=m; i+) ak=i; if (k=n) for (int i=0; in; i+) cout
8、ai ; coutmn; DFS(0); return 0; 输出输出1-m个数中取个数中取n个数的所有排列。例如个数的所有排列。例如m=3 ,n=2的所有排列为:的所有排列为:1 21 32 12 33 13 2例例2:排列问题:排列问题/从从1到到m中取中取n个数,不允许重复取数个数,不允许重复取数#include using namespace std;int n,m, a10; bool bz10;void DFS(int k) for (int i=1; i=m; i+) if ( !bzi ) ak=i; if (k=n) for (int i=0; in; i+) coutai
9、; coutmn; for (int i=0; im; i+) ai=i+1; DFS(0); return 0; /从从1到到m中取中取n个数,不允许重复取数个数,不允许重复取数#include using namespace std;int n,m, a10;void DFS(int k) for (int i=k; im; i+) if (k=n) for (int i=0; in; i+) coutai ; coutmn; DFS(0); return 0; 输出输出m个数中取个数中取n个数的所有组合。例如个数的所有组合。例如m=5,n=3的所有组合为:的所有组合为:1 2 31 2
10、41 2 5 1 3 41 3 51 4 5 2 3 42 3 52 4 5 3 4 5例例3:组合问题:组合问题#includeusing namespace std;int m,n,a10; /存放每个数存放每个数void comb(int k) for (int i=ak-1+1; in ) for (int i=1; i=n;i+) printf(%5d,ai); printf(n); return; comb(k+1); int main( ) scanf(%d%d,&m,&n);comb(1); /从第从第1个数开始个数开始 /使用数组使用数组queue 存放结点队
11、列存放结点队列void BFS( ) head=0; tail=1; queuehead=首结点的值首结点的值; while (headtail) /队列不空队列不空 temp=tail; for (k=head; k=tail; k+) /对当前层扩展对当前层扩展 if ( 到达目的状态到达目的状态 ) 输出结果输出结果; return; for (i=1; i=m; i+) /每个结点的每个结点的m种扩展可能种扩展可能 if (可以扩展可以扩展) 处理每种可能情况;处理每种可能情况; queuetemp+=扩展出的结点值扩展出的结点值; head=tail; tail=temp;三、广度优
12、先三、广度优先(BFS)模板模板1:/使用数组使用数组queue 存放结点队列存放结点队列void BFS( ) head=0; tail=1; queuehead=首结点的值首结点的值; while (headtail) /队列不空队列不空 if ( 到达目的状态到达目的状态 ) 输出结果输出结果; break; head+; for (i=1; i=m; i+) /结点结点head的的m种扩展可能种扩展可能 if (可以扩展可以扩展) 处理每种可能情况;处理每种可能情况; queuetail+=扩展出的结点值扩展出的结点值; 四、广度优先四、广度优先(BFS)模板模板2:/使用使用STL中的队列中的队列void BFS( ) 首结点入队列首结点入队列Q; while ( ! Q.empty()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协议书附属条件范本
- 母狗收养协议书范本
- 离婚协议书中的家庭农场经营权与土地流转协议
- 车辆抵押担保汽车维修保养担保服务协议
- 采暖系统安装与节能技术咨询合同
- 贝娥婚姻关系终止合同
- 草莓苗种植与农业科技园区合作合同
- 汽车质押担保借款合同范本
- 知识产权产业园区厂房转租及创新成果转化合同
- 肾结石非手术的护理查房
- 1.1 物质的分类 课件-2024-2025学年高一上学期化学人教版(2019)必修第一册
- 幼儿教师沟通技巧培训课件
- 2025年安全知识竞赛题库及答案(共150题)
- GB 45673-2025危险化学品企业安全生产标准化通用规范
- 医院培训课件:《新生儿早期基本保健专家共识(2020)解读》
- 南开强基计划试题及答案
- 区块链与慈善公益商业模式的创新与探索
- 2025年湖南中考英命题分析及复习备考策略指导课件
- 近岸海域生态环境问题分析
- 2025重庆水务环境集团招聘8人笔试参考题库附带答案详解
- 2025至2030中国大型啤酒厂产业运行态势与竞争格局研究报告
评论
0/150
提交评论