- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言与程序设计The C Programming Language ;本章讲授内容;12.1 递归概述;【例12.1】 用递归法计算阶乘n!;计算4!的递归执行过程;递归的两个要素;递归算法的特点;12.2 递归函数设计;12.2.1 字符串的递归处理;【例12.2】 用递归实现标准库函数strcmp(s,t);;12.2.2 汉诺塔问题;【例12.3】 设计一个求解汉诺塔问题的算法。;函数move(n,a,b,c);12.2.3 排列问题;【例12.4】 找出从1~n中任取m个数的所有排列;函数PrintPerm(a,n,m,cur);12.3 分治法与快速排序;【例12.5】 用quick排序算法对整数排序;实现快速排序的函数QuickSort;QuickSort分析;QuickSort分析;分解数组的函数partition;partition分析;切分元素的选择;12.4 回溯法;12.4.1 解空间与算法步骤;深度优先搜索整个解空间;剪枝函数;递归回溯;backtrace分析;12.4.2 0-1背包问题;0-1背包问题的解空间;0-1背包问题的约束函数;【例12.6】 编程实现0-1背包问题的回溯算法。;12.4.3 装载问题;装载问题;【例12.7】 使用回溯法求出最优装载方案;程序分析;12.5 动态规划;12.5.1 动态规划算法的基本步骤;设计动态规划的实际步骤;12.5.2 0-1背包问题的动态规划算法;0-1背包问题的子问题为“选择第i件及其后的物品放入容量为j的背包”,可描述如下:;2.最优值的递归定义;3.计算最优值;计算最优值的递归函数;4.构造一个最优解;/* 根据最优值构造并输出最优方案 */
void PrintAns(int c,int n)
{
int i;
for( i = 1; i n; i++)
{
if(d[i][c]==d[i+1][c] ) x[i]=0;
else {
x[i]=1;
c-=w[i];
}
}
x[n]=(d[n][c]0)?1:0;
for( i = 1; i = n; i++) printf(%5d,x[i]);
printf(\n);
};【例12.8】 编写用动态规划法求解 0-1背包问题的程序;12.5.3 挖地雷问题;【例12.9】 编程求解挖地雷问题,输出挖地雷的顺序和挖到的地雷数量;(2)地窖之间联系的表示:地窖之间的联系可用二维数组a表示,a[i][j]表示第i个地窖与第j个地窖之间是否有通路,a[i][j]为1表示从地窖i到地窖j有通路,a[i][j]为0表示无通路。
(3)子问题为“从第i个地窖开始挖最多可以挖出的地雷数”,设其解为f(i)。地窖中地雷的数量可用一维数组w表示,w[i]为第i个地窖的地雷数,则从第i个地窖起可挖到的最大地雷数=该地窖本身的地雷+向后的最大的地雷数max,递归式如下:
f(i)=w(i)+ max{ f(j)} (ij=n , a(i,j)=1)
边界:f(n)=w(n);;12.6 经典问题的递归程序设计;;;12.6.2 深度优先搜索:骑士游历问题;问题分析;(2)马的跳跃方向的表示方法:设置一组坐标增量来描述这4个跳跃方向,
(1,2) 表示向右增1,向上增2;
(2,1)表示向右增2,向上增1;
(2,-1) 表示向右增2,向下增1;
(1,-2)表示向右增1,向下增2。
在程序中,x方向增量用数组元素dirx[j]表示,y方向增量用数组元素diry[j]表示,j的取值为0,1,2,3,表示4个跳跃方向。即马向某个方向试探跳跃一步后新的坐标表示为:(x+dirx[j], y+diry[j])。;;(4)搜索策略: 本题可以使用深度优先搜索法求解。以树的搜索为例,深度优先搜索法是优先扩展尚未扩展的且具有最大深度的结点,而广度优先搜索法是在扩展完第K层的结点以后才扩展K+1层的结点。
以4*4的棋盘为例进行分析,用树形结构表示马走的所有过程,求从起点到终点的路径,实际上就是从根结点开始深度优先搜索这棵树。
马从(1,1)开始,按深度优先搜索法,走一步到达(2,3),判断是否到达终点,若没有,则继续向前走,再走一步到达(4,4),然后判断???否到达终点,若到达则退出,搜索过程结束。为了减少搜索次数,在马走的过程中,判断下一步所走的位置是否在棋盘上,如果不在棋盘上,则选择另一条路径再走。;深度优先搜索法与前面讲的回溯法差不多,用递归的方式使代码简化,也好说明问题。其主要区别是
您可能关注的文档
最近下载
- 执业兽医机构聘用证明或服务协议.docx VIP
- 高中语文革命题材课文阅读与写作能力培养策略研究教学研究课题报告.docx
- 生态生命安全森林草原火灾的危害教案.pdf VIP
- 2025年淮安市专业技术人员公需试题-党的二十届三中全会精神解读.docx VIP
- 《文献检索与毕业论文写作》课件第三章 常用英文数据库的使用 .pptx VIP
- 铭记抗战历史+弘扬民族精神+纪念抗战胜利主题班会.pptx VIP
- 2025版煤矿安全规程学习培训课件.pptx
- 22J403-1楼梯栏杆栏板.pptx VIP
- 子宫内膜癌分子分型临床应用中国专家共识(2024年版)解读PPT课件.pptx VIP
- 2024新版2025秋教科版科学三年级上册全册教案教学设计.docx
文档评论(0)