应用-河内塔.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
应用-河内塔

河內塔(Hanoi)問題 河內塔是由三根柱子,和n個不同直徑的圓盤所組成,它的遊戲方法是,將這n個圓盤由其一個柱子,全部搬至另一個柱子上,它的遊戲規則如下: ? 在搬動的過程中,直徑大的一定要在直徑小的圓盤下面。 ? 一次只能搬動一個圓盤,且圓盤只能在這三個柱子之間移動,不得超出範圍。 ? 演算法:虛擬碼 若有k個圓盤,則圓盤移動的總次數為: 2k-1+2k-2+…+2k-k=2k-1 設三個木樁為a 、 b 、 c,數量為n,而函式則為Hanoi (n , a , b , c) 當N為1時表示只要再移動一次就完成工作,也就是只要把a移到c就完成工作。 當N不為1時,作2個動作 1.執行Hanoi(n-1,a,c,b) 2.執行Hanoi(n-1,b,a,c) void Hanoi(int n , a, b,c) { if (n ==1) 列印 Move disk 1 form a to c; else { Hanoi(n-1,a,b,c); 列印Move disk n form a to c; Hanoi(n-1,b,c,a); 列印 Move disk 1~n-1 form b to c } } C語言:程式碼 #include stdio.h //#define SHOW_DETAILS #ifdef SHOW_DETAILS int Max_Disks; #endif void enter_recursion(int n, int from, int to, int middle) { #ifdef SHOW_DETAILS printf(進入第 %d 層遞迴深度: (n=%d, from=%d, to=%d, mid=%d)\n, Max_Disks - n, n, from, to, middle); #endif } void leave_recursion(int n, int from, int to, int middle) { #ifdef SHOW_DETAILS printf(離開第 %d 層遞迴深度: (n=%d, from=%d, to=%d, mid=%d)\n, Max_Disks - n, n, from, to, middle); #endif } void move_a_disk(int from, int to) { printf(從 %d 搬到 %d\n, from, to); } /* 從第 from 個柱子起,透過第 middle 個柱子當中介, 將 n 負碟子搬到第 to 個柱子上。*/ void hanoi(int n, int from, int to, int middle) { if (n = 1) move_a_disk(from, to); else { /* 第一步驟 */ enter_recursion(n-1, from, middle, to); hanoi(n-1, from, middle, to); leave_recursion(n-1, from, middle, to); /* 第二步驟 */ move_a_disk(from, to); /* 第三步驟 */ enter_recursion(n-1, middle, to, from); hanoi(n-1, middle, to, from); leave_recursion(n-1, middle, to, from); } } /* hanoi */ int main() { int number; printf(How many disks do you want to start with? ); scanf(%d, number); if (number 1) { printf(Sorry, the number must be greater than zero.\n); return 1; } # ifdef SHOW_DETAILS Max_Disks = number; # endif printf(Now were trying to move %d disks from 1 to 3...\n, number); hanoi(number, 1, 3, 2); } 應用-老鼠迷宮 老鼠走迷宮是實驗心理學家常做的一項實驗,在這實驗中老鼠被置於一個無頂大盒子的入口處,盒子中利用牆將大部份移動去向阻隔起來,這樣科學家們就可以仔細觀察老鼠再迷宮中如何移動直到最後抵達另一端出口為止。

文档评论(0)

2752433145 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档