例7.8 Hanoi(漢諾)塔問題。
阿新 • • 發佈:2019-02-12
Hanoi(漢諾)塔問題。古代有一個樊塔,塔內有3個座A,B,C,開始時A座上有64個盤子,盤子大小不等,大的在下,小的在上。有一個老和尚想把這64個盤子從A座移到C座,但規定每次只允許移動一個盤子,且在移動的過程中在3個座上都始終保持天盤在下,小盤在上。在移動過程中利用B座。要求程式設計序輸出移動一盤的步驟。
Ø將n個盤子從A座移到C座可以分解為以下3個步驟:
(1)將A上n-1個盤藉助C座先移到B座上
(2)把A座上剩下的一個盤移到C座上
(3)將n-1個盤從B座藉助於A座移到C座上
Ø解題思路:(1)命令第2個和尚將63個盤子從A座移到B座
(2)自己將1個盤子(最底下的、最大的盤子)從 A座移到C座
(3)再命令第2個和尚將63個盤子從B座移到C座
第1個和尚的做法:將63個從A到B,將1個從A到C,將63個從B到C
第2個和尚的做法:將62個從A到C,將1個從A到B,將62個從C到B
#include <stdio.h> int main() { void hanoi(int n,char one,char two,char three); // 對hanoi函式的宣告 int m; printf("input the number of diskes:"); scanf("%d",&m); printf("The step to move %d diskes:\n",m); hanoi(m,'A','B','C'); } void hanoi(int n,char one,char two,char three) // 定義hanoi函式 // 將n個盤從one座藉助two座,移到three座 { void move(char x,char y); // 對move函式的宣告 if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } void move(char x,char y) // 定義move函式 { printf("%c-->%c\n",x,y); }