1. 程式人生 > >漢諾塔問題(看完就記住)

漢諾塔問題(看完就記住)

       漢諾塔問題:有三個柱子,初始柱a,輔助柱b和目標柱c;在初始柱上有著n個圓盤(圓盤放置規則,大的在下小的在上),對圓盤從上到下依次編號從1到n。將圓盤從初始柱a移到目標柱c上的問題就是漢諾塔問題。

        解題思路:

                                 (1)以C盤為中介,從a柱將1至n-1號盤移至b柱;

                                 (2)將a柱中剩下的第n號盤移至c柱;

                                 (3)以a柱為中介;從b柱將1至n-1號盤移至c柱。    

下面是通過遞迴實現漢諾塔問題的c程式碼:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

void hanio(int n, char a, char b, char c)
{
	if (1 == n)
	{
		printf("盤子%d:%c->%c\n", n, a, c);//只有一個盤子,直接從a—>c
	}
	else
	{
		hanio(n - 1, a, c, b);//將第n-1個盤子藉助c柱把a柱的盤子移到c柱
		printf("盤子%d:%c->%c\n", n, a, c);
		hanio(n - 1, b, a, c);//將第n-1個盤子藉助a柱把b柱的盤子移到c柱
	}
}


int main()
{
	int n = 0;
	printf("輸入盤子個數:");
	scanf("%d", &n);
	hanio(n, 'a', 'b', 'c');
	
	system("pause");
	return 0;
}

結果演示: