如何做一个C语言编程的汉诺塔游戏?要有源代码。 谁有汉诺塔游戏(带动画)c语言源代码(?
\u6c42\u4e00\u4e2a\u7528C\u8bed\u8a00\u7f16\u5199\u7684\u6c49\u8bfa\u5854\u7a0b\u5e8f\uff0c\u80fd\u591f\u7528\u56fe\u7247\u663e\u793a\u7684\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u5c0f\u6e38\u620f\uff0c\u8981\u5e26\u6e90\u4ee3\u7801\u7684\u5c0f\u4f19 \u4f60\u53bb\u5b66opengl\u5427 \u5b58c\u7684\u53ea\u80fddos\u4e0b
opengl\u53ef\u4ee5\u652f\u6301\u7a97\u53e3\u663e\u793a
c++ window\u53d8\u6210\u4e5f\u53ef\u4ee5\u7a97\u53e3\u663e\u793a
\u4e00\u4e2a\u6c49\u8bfa\u5854 \u5149c\u8bed\u8a00\u89e3\u51b3\u7684\u4e86\u5417
\u4e00\u4e2a\u6e38\u620f \u6d89\u53ca\u5230\u56fe\u50cf\u52a8\u753b\uff0c\u5f15\u64ce \u7b49\u4e00\u7cfb\u5217\u4e1c\u897f\uff0c\u5e76\u4e0d\u4ec5\u4ec5\u53ea\u4e0e\u7a0b\u5e8f\u76f8\u5173\uff1b
\u4e00\u4e2a\u4e2d\u7b49\u4ee5\u4e0a\u7684\u6e38\u620f\u8981\u4e00\u4e2a30\u4eba\u7684\u56e2\u961f\u5de5\u4f5c3 \u30014\u4e2a\u6708\uff0c\u4ee3\u7801\u91cf\u4ee5\u5343\u6216\u4e07\u8bb0\uff1b
\u5047\u4f7f\u6211\u6709\u8fd9\u79cd\u7f16\u51fa\u6e38\u620f\u7684\u4ee3\u7801\uff0c\u6211\u53d1\u7ed9\u4f60\uff0c\u4e8c\u5341\u4e2a\u9875\u9762\u4e5f\u88c5\u4e0d\u4e0b\u554a\u3002
\u5b69\u5b50 c\u8bed\u8a00\u8fd9\u4e1c\u897f \u8d8a\u5b66\u8d8a\u6df1\uff0c\u4ef0\u4e4b\u5f25\u9ad8\uff0c\u94bb\u4e4b\u5f25\u575a\uff1b\u597d\u597d\u5b66\u4e60\u57fa\u7840\uff0c\u4ee5\u540e\u5c31\u80fd\u89e3\u5f00\u5979\u7684\u5965\u5999\uff01
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
汉诺塔问题也是程序设计中的经典递归问题,下面我们将给出递归和非递归的不同实现源代码。
绛旓細movedisk(n,'A','C','B');printf("鐩樺瓙鏁伴噺%d鐨勬椂鍊欑Щ鍔ㄤ簡%d娆n",n,count);scanf("%d",&n) ;} void movedisk(int n,char from,char to,char tmp){ if(n>1)movedisk(n-1,from,tmp,to);printf("鐩樺瓙 %d 鍙蜂粠鏌卞瓙 %c 绉诲姩鍒颁簡鏌卞瓙 %c 涓奬n",n,from,to);count++;if(n>...
绛旓細hanoi(n-1,two,one,three); }} void move(char x,char y) {cout<<x<<"-->"<<y<<endl;} xw597709862 | 鍙戝竷浜2011-11-18 涓炬姤| 璇勮 0 0 涓烘偍鎺ㄨ崘: 姹夎濉旈棶棰 姹夎濉旈掑綊绠楁硶 姹夎濉攃璇█绋嬪簭浠g爜 C璇█鎴 姹夎濉旀槸浠涔 姹夎濉旀父鎴 C璇█閫掑綊姹夎濉 c璇█绋嬪簭璁捐 c璇█鍏ラ棬鑷...
绛旓細int n;printf("please input the number of diskes:\n");scanf("%d",&n);printf("the steps to moving is:\n");hanoi(n,'A','B','C');} void hanoi(int n,char one ,char two ,char three)//鎶妌涓洏瀛愪粠 one鍊熷姪two绉诲姩鍒皌here { void move(char a,char b);if(n==1) ...
绛旓細Nuo(MidTa,FromTa,ToTa,(NeedMove-1));//鏈鍚庢妸鎸埌涓棿濉斾笂鐨凬-1涓閮芥尓鍒扮洰鏍囧涓婏紙杩欓噷浣犺鍏堝亣璁捐繖鏍风殑鍑芥暟鑳藉疄鐜版湰鍔熻兘锛墋 else { NuoYiWei(FromTa,ToTa);//灏卞墿涓涓瑕佹尓鍔ㄤ簡灏辩洿鎺ユ尓鍔 } } 杩欎釜鍑芥暟鏄湪C++閲屽啓鐨勶紝濡傛灉鐢C璇█杩樿娉ㄦ剰浜涖傛垜杩欓噷杩樻湁鐢–鍐鐨勬眽璇哄鐨绋嬪簭锛屼綘缁欐垜...
绛旓細鑻ョЩ鍔ㄧ殑鍦嗙洏涓 n(n>1)锛屽垯鍒嗘垚鍑犳璧帮細鎶 (n-1) 涓渾鐩樹粠 A 閽堢Щ鍔ㄥ埌 B 閽堬紙鍊熷姪 C 閽堬級锛汚 閽堜笂鐨勬渶鍚涓涓鍦嗙洏绉诲姩鍒 C 閽堬紱B 閽堜笂鐨 (n-1) 涓渾鐩樼Щ鍔ㄥ埌 C 閽堬紙鍊熷姪 A 閽堬級銆傛瘡鍋氫竴閬嶏紝绉诲姩鐨勫渾鐩樺皯涓涓紝閫愭閫掑噺锛屾渶鍚庡綋 n 涓 1 鏃讹紝瀹屾垚鏁翠釜绉诲姩杩囩▼銆傚洜姝わ紝瑙e喅姹夎...
绛旓細婧愮▼搴 姹夎濉 绋嬪簭 鍏朵粬绫讳技闂2016-06-01 C璇█ 姹夎濉旂▼搴褰搉=3鏃,鎵ц姝ラ鎬庝箞鍋? 2014-11-27 姹傜湡姝g悊瑙f眽璇哄闂鐨缂栫▼澶х鍥炵瓟涓涓,褰搉=3鏃,鐢c璇█... 45 2016-06-16 鍏充簬C璇█姹夎濉闂,褰撶▼搴忔墽琛屽埌001銆002銆003姝ユ椂... 1 2014-11-20 c璇█閫掑綊璋冪敤瑙e喅姹夎濉旈棶棰樼▼搴忚缁嗚В绛斻傚綋n...
绛旓細void main(){ int n;printf("please input number: ");scanf("%d",&n);printf("the stemp is :\n");hounit(n,'a','b','c');}娌℃湁澶ぇ闂 涓嬫娉ㄦ剰涓鐐瑰氨琛屼簡 n鍓嶉潰涓瀹氳鍔犱笂&
绛旓細鈶 move(n-1,y,x,z);} } 姣斿鏈4涓洏瀛愶紝鐜板湪鍏ㄩ儴鏀惧湪A濉斾笂銆傜洏瀛愭牴鎹紪鍙蜂负1銆2銆3銆4渚濇鍗婂緞鏇惧ぇ銆傜幇鍦ㄨ灏4涓洏瀛愮Щ鍔ㄥ埌C涓婏紝骞朵笖鏄寜鍘熼『搴忕綏鍒椼傞鍏堟垜浠冭檻濡備綍鎵嶅彲浠ュ皢4鍙风Щ鍔ㄥ埌C鍛紵灏辫浠涓轰腑浠嬶紝棣栧厛灏嗕笂闈㈢殑涓変釜绉诲姩鍒癇銆傛姝ョ殑鎿嶄綔涔熷氨鏄绋嬪簭涓殑鈶犲紑濮嬭皟鍏ove鍑芥暟锛...
绛旓細/* 姹夎濉 hannota.c */ include / 瑙f硶锛氬鏋滄煴瀛愭爣涓篈BC锛岃鐢盇鎼嚦C锛屽湪鍙湁涓涓鐩樺瓙鏃讹紝灏卞皢瀹冪洿鎺ユ惉鑷矯锛屽綋鏈変袱涓洏瀛愶紝灏卞皢B褰撲綔杈呭姪鏌便傚鏋滅洏鏁拌秴杩2涓紝灏嗙涓変釜浠ヤ笅鐨勭洏瀛愰伄璧锋潵锛屽氨寰堢畝鍗曚簡锛屾瘡娆″鐞嗕袱涓洏瀛愶紝涔熷氨鏄細A->B銆丄->C銆丅->C杩欎笁涓楠わ紝鑰岃閬綇鐨勯儴浠斤紝鍏跺疄...
绛旓細瑕佺湅鎳傞掑綊绋嬪簭锛屽線寰搴斿厛浠庢渶绠鍗曟儏鍐电湅璧枫傚厛鐪媓anoi(1, one, two, three)鐨勬儏鍐点傝繖鏃剁洿鎺ュ皢one鏌变笂鐨涓涓鐩樺瓙鎼埌three鏌变笂銆傛敞鎰忥紝杩欓噷one鏌辨垨three鏌卞埌搴曟槸A銆丅杩樻槸C骞朵笉閲嶈锛岃璁颁綇鐨勬槸鍑芥暟绗簩涓弬鏁颁唬琛ㄧ殑鏌变笂鐨勪竴涓洏琚惉鍒扮鍥涗釜鍙傛暟浠h〃鐨勬煴涓娿備负鏂逛究锛屽皢杩欎釜鍔ㄤ綔璁颁负锛歰ne =銆...