當前位置:編程學習大全網 - 源碼下載 - 如何做壹個C語言編程的漢諾塔遊戲?要有源代碼。

如何做壹個C語言編程的漢諾塔遊戲?要有源代碼。

#include<stdio.h>

void move(char x,char y)

{

printf("%c-->%c\n",x,y);

}

void hanoi(int n,char one ,char two,char three)

{

if(n==1) move(one,three);

else

{

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

main()

{

int m;

printf("input the number of disks:");

scanf("%d",&m);

printf("the step to moving %3d diskes:\n",m);

hanoi(m,'A','B','C');

}

算法介紹:

其實算法非常簡單,當盤子的個數為n時,移動的次數應等於2^n – 1(有興趣的可以自己證明試試看)。後來壹位美國學者發現壹種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放 A B C;

若n為奇數,按順時針方向依次擺放 A C B。

(1)按順時針方向把圓盤1從現在的柱子移動到下壹根柱子,即當n為偶數時,若圓盤1在柱子A,則把它移動到B;若圓盤1在柱子B,則把它移動到C;若圓盤1在柱子C,則把它移動到A。

(2)接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這壹步沒有明確規定移動哪個圓盤,妳可能以為會有多種可能性,其實不然,可實施的行動是唯壹的。

(3)反復進行(1)(2)操作,最後就能按規定完成漢諾塔的移動。

所以結果非常簡單,就是按照移動規則向壹個方向移動金片:

如3階漢諾塔的移動:A→C,A→B,C→B,A→C,B→A,B→C,A→C

漢諾塔問題也是程序設計中的經典遞歸問題,下面我們將給出遞歸和非遞歸的不同實現源代碼。

  • 上一篇:股票中的指數是什麽意思啊,
  • 下一篇:如何使用libjpeg
  • copyright 2024編程學習大全網