C語言編程實現漢諾塔問題
1.首先解釋一下,漢諾塔問題:古代梵塔內有A、B、C3個座,開始時A座上面有64個盤子,盤子大小不等,大的在下,小的在上。一個老和尚想把64個盤子從A移到C,規定移動過程中3個座上面始終保持大的在下,小的在上,且每次只能移動一個盤子。編程實現輸出移動盤子的過程。
2.解題思路
(1)命令第2個和尚將上面63個盤子從A移到B;
(2)自己把最底下,最大的那個盤子從A移到C;
(3)再讓第2個和尚把63個盤子從B移到C;
只需3步即完成,這中間蘊涵的就是遞歸思想。但是還有一個問題,怎麼才能完成步驟(1)和(3)呢?看下面的3個步驟:
<1> 命令第3個和尚將上面62個盤子從A移到C;
<2> 自己把最底下,最大的那個盤子從A移到B;
<3> 再讓第3個和尚把62個盤子從C移到B;
這就完成了步驟(1),步驟(3)的思路可類推。
C語言代碼如下
#include<stdio.h>
int main()
{
void hanoi(int n,char one ,char two ,char three );
int n;
scanf("%d",&n);
hanoi(n ,'A' ,'B' ,'C' );
return 0 ;
}
//將n個盤子藉助two,從one移到three
void hanoi(int n,char one ,char two ,char three ) //定義漢諾塔函數
{
void move (char one ,char two );
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 );
}