数据结构常见问题:12单元18 汉诺塔问题_第1页
数据结构常见问题:12单元18 汉诺塔问题_第2页
数据结构常见问题:12单元18 汉诺塔问题_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程常见问题 -单元18 汉诺塔问题1汉诺塔问题?解析:汉诺塔递归栈 问题抽象 3个塔,n个碟子 初始:所有碟子放在1号塔,大的在底下,小的在上面 任务:把碟子移动到2号塔,顺序不变, 可用3号塔辅助 限制 每次只能移动一个碟子 总是大碟子在下,小的在上 递归解法 移动碟子的方法:move(n, t1, t2, t3) 将n个碟子从t1移到t2,t3辅助 可分解为3个步骤 将n-1个碟子从t1移到t3:move(n-1, t1, t3, t2) 将最大的碟子从t1移到t2 将n-1个碟子从t3移到t2:move(n-1, t3, t2, t1) 汉诺塔递归程序 void TowersO

2、fHanoi(int n, int x, int y, int z) / Move the top n disks from tower x to tower y. / Use tower z for intermediate storage. if (n 0) TowersOfHanoi(n-1, x, z, y); cout Move top disk from tower x to top of tower y endl; TowersOfHanoi(n-1, z, y, x); moves(n)=2n-1最少次数,(2n) 一般递归程序转换为循环 递归函数主体的转换 转换为循环,whi

3、le(1)即可 递归调用的转换 将当前参数、局部变量(活动记录)压栈 参照调用方式改变参数,继续循环 函数执行结束递归返回的处理 若栈空,整个递归过程结束,跳出循环 否则,将调用者的活动记录弹出栈,恢复其环境,继续循环 递归函数不同入口的区分返回地址的处理 上例:ENTRANCE、FIRST、SECOND 活动记录的一部分,与参数、局部变量一同压栈、出栈 在循环主体中,根据当前活动记录的入口值,执行不同代码 汉诺塔的递归栈实现 #include #include #include #include #include using namespace :std; enum ENTRANCE = 0

4、, FIRST, SECOND ; struct ac int n, x, y, z; int r; ; 汉诺塔的递归栈实现 void hanoi(int n, int x, int y, int z) stack stack; struct ac ac = n, x, y, z, ENTRANCE ; while (1) if (ac.n = 0) if (stack.empty() break; ac = stack.top(); stack.pop(); if (ac.r = ENTRANCE) ac.r = FIRST; else ac.r = SECOND; 汉诺塔递归栈实现 if

5、(ac.r = ENTRANCE) stack.push(ac); ac.n-; swap(ac.y, ac.z); else if (ac.r = FIRST) cout Move top disk from tower ac.x to top of tower ac.y endl; stack.push(ac); ac.r = ENTRANCE; ac.n-; swap(ac.x, ac.z); 汉诺塔递归栈实现 else if (ac.r = SECOND) if (stack.empty() break; ac = stack.top(); stack.pop(); if (ac.r = ENTRANCE) ac.r = FIRST; else ac.r = SECOND; 汉诺塔递归栈实现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论