C語言編程實現漢諾塔問題

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 );
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章