當前位置:首頁 » 編程語言 » 梵塔問題c語言

梵塔問題c語言

發布時間: 2022-04-27 11:08:48

c語言漢諾塔問題,不是很理解

請注意,void hanoi ( int n, char a, char b, char c )
這里的a,b,c是三個char變數。
當執行調用hanoi(3,'B','C','A');時,「將a柱子上的最後一個盤子移動到c」,
其中的a的值就是'B',c的值就是'A',也就是「將B柱子上的最後一個盤子移動到A柱」了。

❷ 用C語言代碼來編寫含漢諾塔問題,利用堆棧來實現.求代碼

演算法思想
對於漢諾塔問題,當只移動一個圓盤時,直接將圓盤從 A 針移動到 C 針。若移動的圓盤為 n(n>1),則分成幾步走:把 (n-1) 個圓盤從 A 針移動到 B 針(藉助 C 針);A 針上的最後一個圓盤移動到 C 針;B 針上的 (n-1) 個圓盤移動到 C 針(藉助 A 針)。每做一遍,移動的圓盤少一個,逐次遞減,最後當 n 為 1 時,完成整個移動過程。
因此,解決漢諾塔問題可設計一個遞歸函數,利用遞歸實現圓盤的整個移動過程,問題的解決過程是對實際操作的模擬。
程序代碼
#include <stdio.h>
int main()
{
int hanoi(int,char,char,char);
int n,counter;
printf("Input the number of diskes:");
scanf("%d",&n);
printf("\n");
counter=hanoi(n,'A','B','C');
return 0;
}
int hanoi(int n,char x,char y,char z)
{
int move(char,int,char);
if(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
return 0;
}
int move(char getone,int n,char putone)
{
static int k=1;
printf("%2d:%3d # %c---%c\n",k,n,getone,putone);
if(k++%3==0)
printf("\n");
return 0;
}

❸ C語言——漢諾塔問題

#include<stdio.h>
staticinta[3][10],n;
voidshow()
{
inti,j;
for(i=0;i<3;i++)
{
for(j=0;j<n;j++)
if(a[i][j]==-1)printf("*");
elseprintf("%d",a[i][j]);
printf("");
}
printf(" ");
}
voidmove(intx,inty)
{
inti=0,j=n-1;
while(a[x][i]==-1)i++;
while(a[y][j]!=-1)j--;
a[y][j]=a[x][i];
a[x][i]=-1;
show();
}


intf(intx,intp,intq)
{

intz=3-p-q;
if(x==1)move(p,q);
else
{
f(x-1,p,z);
move(p,q);
f(x-1,z,q);
}
}
intmain()
{
inti,j;
printf("輸入盤子數量(1到9):");
scanf("%d",&n);
for(i=0;i<3;i++)
for(j=0;j<n;j++)
a[i][j]=-1;

for(j=0;j<n;j++)
a[0][j]=j;

f(n,0,2);


}

❹ 設計一個梵塔(又稱漢諾塔)問題的求解程序

#include "stdio.h"
void move(int n, int x, int y, int z)
{
if (n == 1) printf("%c-->%c\n", x, z);
else
{
move(n - 1, x, z, y);
printf("%c-->%c\n", x, z);
move(n - 1, y, x, z);
}
}
int main()
{
move(7, 'a', 'b', 'c');
getchar();
}

❺ C語言漢諾塔問題

關於漢諾塔這個東西是相當的抽象,我當時學習的時候看了好幾個版本的教程,也沒有搞懂,最後還是自己反復的理解,頓悟了,

所以我這里把當時我作為初學者的想法寫給你,但是最重要的還得靠你自己的理解:

1、對於void hanoi(int n,char one ,char two,char three);這個函數,表示

將n個盤子從one通過two移動到three

我當時是這么想的:先不管hanoi函數內部發什麼啥,只要這么的執行一次,肯定的,就有n個盤子已經成功移動到three啦

2、理解了上面的含義後,我是這么想的:

要將5個盤子從A移動到C(通過B),就得先從A將4個移動到B(通過C),一個從A到C,再從B移動4個到C(通過A),搞定

所以說hanoi(5,'A' , 'B', 'C'); 裡面其實分為三步:

1)hanoi(4, 'A' , 'C', 'B');

2) printf("A->C");

3)hanoi(4, 'B' , 'A', 'C');

就是這樣的三步,至於1)這部嘛,反正我堅信:只要執行了這句函數,不管過程,最終A會移動到C4個的

3、然後是最後一點,對於hanoi這個函數,是指將將n個盤子從one通過two移動到three,所以函數內部這么寫:

{
hanoi(n-1,one,three,two);
printf("%c->%c",one,three);
hanoi(n-1,three,two);
}

代碼和你給的略有不同,你的代碼將printf專門又用了一個函數來實現,原理是一樣的

可能是由於你真好學習到函數的相關,所以這個教程故意想弄得復雜點。。。

但是,

這里還應該有一個判斷語句,if(n==1),也就是只有1塊需要移動,也就不需要這么麻煩的三步了,直接移動就好了,所以最終的代碼:

{
if(n==1)
printf("%c->%c",one,three);
else
{
hanoi(n-1,one,three,two);
printf("%c->%c",one,three);
hanoi(n-1,three,two);
}
}

=============================================

以上就是我的回答,希望對你有幫助

漢諾塔這東西主要需要的還是自己的反復理解,想通了就簡單啦~

如果還有什麼疑問歡迎隨時向我追問

^o^

❻ C語言 遞歸 梵塔問題

這是漢羅塔問題,其中的'N'表示的是盤子的個數.move(n,a,b,c)中的n即表示現在需要搬動的盤子數,'a'位置的參數(即move()函數中的第二個參數表示要移出盤子的"柱子"的編號),同理'c'位置的參數(即move()函數中的第四個參數表示要移入盤子的"柱子"的編號).
如:mov(n,b,a,c)就是要將'b'柱子中的第一個盤子移動到'c'柱子上去.

❼ 漢諾塔問題的C語言程序應該怎麼寫並請說明一下原因

其實主要就是三個步驟:
第一,把a上的n-1個盤通過c移動到b。
第二,把a上的最下面的盤移到c。
第三,因為n-1個盤全在b上了,所以把b當做a重復以上步驟就好了。#include<stdio.h>

voidmove(intn,chara,charb,charc)
{
if(n==1)
printf(" %c->%c ",a,c);//當n只有1個的時候直接從a移動到c
else
{
move(n-1,a,c,b);//第n-1個要從a通過c移動到b
printf(" %c->%c ",a,c);
move(n-1,b,a,c);//n-1個移動過來之後b變開始盤,b通過a移動到c
}
}

intmain()
{
intn;
printf("請輸入要移動的塊數:");
scanf("%d",&n);
move(n,'a','b','c');
return0;
}

❽ c語言問題的漢諾塔問題

A-B B-C就等於A-C只是多移動一次而已。所以你的想法實質是A-C A-C A-C A-B C-B這就明顯的錯誤了阿!C上面已經有盤子了你不能在進行A-c這步了阿!因為盤子是大的在下,小的在上。

❾ 用C語言完整地編三階梵塔問題

#include<stdio.h>
void hanoi(int,char,char,char);
void move(char,char);

void hanoi(int n,char a,char b,char c){
if(n==1){
move(a,c);
}

else if(n>1){
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
}

void move(char a,char b){
printf("%c------>%c\n",a,b);
}

void main(){
int n;
printf("輸入漢諾塔階數:");
scanf("%d",&n);
printf("移動方法如下:\n");
hanoi(n,'A','B','C');
}

熱點內容
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:487
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13
創建文件夾失敗 發布:2025-05-16 05:12:59 瀏覽:396
電腦上如何查詢自己的配置 發布:2025-05-16 05:06:36 瀏覽:105
sql中去重 發布:2025-05-16 04:55:06 瀏覽:893
dwr上傳圖片 發布:2025-05-16 04:49:46 瀏覽:122
base64加密的圖片 發布:2025-05-16 04:35:46 瀏覽:356