漢諾塔問題(看完就記住)
阿新 • • 發佈:2018-11-10
漢諾塔問題:有三個柱子,初始柱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; }
結果演示: