漢諾塔(C語言)

2022-12-14 14:19:59 來源:51CTO博客


【資料圖】

漢諾塔(Tower of Hanoi),又稱河內(nèi)塔,是一個源于印度?古老傳說的益智玩具?。大梵天?創(chuàng)造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門?把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

漢諾塔玩法:有三根柱子A B C,假設(shè)A柱子上有n個盤子:

我們的思路是要把A柱子最底下的盤子(最大的那個盤子)先移動到C柱子上前提是要把A柱子除了最底下的那個盤子通過C柱子中轉(zhuǎn),移動到B柱子上(也就是要把n-1個盤子移動到B柱子上)最后再把A柱子上最底下的盤子移動到C柱子上然后通過A柱子中轉(zhuǎn)把B柱子上n-1個盤子移動到C柱子上

有了這個思路代碼就好寫了:

#include void hanoi(int n, char A, char B, char C){  if (n == 1)    printf("%c-->%c\n", A, C);  else  {    hanoi(n - 1, A, C, B);//通過C柱子,把A柱子上的n-1個盤子移動到B柱子上    printf("%c-->%c\n", A, C);    hanoi(n - 1, B, A, C);//最后通過A柱子,把B柱子上的n-1個盤子移動到C柱子上  }}int main(){  int n = 0;  printf("請輸入漢諾塔層數(shù):>");  scanf("%d", &n);  hanoi(n, "A", "B", "C");  return 0;}

下面是我自己做的思維導(dǎo)圖(比較潦草),用3個盤子做例子比較好理解

移動盤子次數(shù)為:2^n -1

步驟為:A->C A->B C->B A->C B->A B->C A->C

標簽: 我們的思路 益智玩具

上一篇:每日熱聞!Java基礎(chǔ)一(Java語言概述)
下一篇:【深入淺出Dubbo3原理及實戰(zhàn)】「SpringCloud-Alibaba系列」基于Nacos作為注冊中心進行發(fā)布SpringCloud-alibaba生態(tài)的RPC接口實戰(zhàn)