關於C語言解決漢諾塔(hanoi)問題


  C語言解決漢諾塔問題

漢諾塔是典型的遞歸調用問題:

hanoi簡介:印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有一個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。

 

--圖片來源於百度百科

 

A,B,C三個柱子,當A柱子上只有一個盤子時直接將該盤子從A柱子移到C柱子上,當A柱子上有n個盤子時,先借助C柱子將n-1移到B柱子上,然后把最后一個從A柱子移到C柱子上,其次把n-1個盤子借助A柱子從B柱子移到C柱子,那么就是三步。

大事化小,小事化了:分三步走

1.把A柱子上的n-1個盤子借助C柱子移到B柱子上

2.然后把最后一個盤子從A柱子直接移到C柱子

3.再然后把B柱子上的n-1個盤子借助A柱子移到C柱子上

代碼如下:

#include<stdio.h>
void hanoi(int n,char a,char b ,char c); //聲明hanoi函數
int main() { int n; printf("enter n:"); scanf("%d",&n); hanoi(n,'A','B','C'); } void hanoi(int n,char a,char b ,char c) //n代表有多少個盤子,a、b、c代表各個柱子
{ if(n == 1 || n == 0) { printf("%c -- %c\n",a,c); //要是剩下最后一個盤子 就直接從a移到c
 }else { hanoi(n-1,a,c,b);    //借助c 把n-1個盤子從a移到b
   printf("%c -- %c\n",x,z);//直接把a移到c
   hanoi(n-1,b,a,c);//借助a 把n-1個盤子從b移到c
} }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM