首页 > 编程语言 > C/C++ > 正文

《汉诺塔C语言程序代码栈》

《汉诺塔C语言程序代码栈》

汉诺塔是一个著名的算法游戏,主要目的是将一堆圆盘以特定的顺序从一根柱子挪动至另一根柱子。游戏的规则是:圆盘之间不能相互堆叠,小盘不能放在大盘上面,一次只能移动一个盘子。

现在,我们将介绍一种用C语言实现汉诺塔游戏的程序代码栈,该栈来源于改良后的经典递归算法。

首先,我们定义三个存储柱子数据的结构体:

struct S0 {

int n;

int a[MAX];

};

struct S1 {

int n;

int a[MAX];

};

struct S2 {

int n;

int a[MAX];

};

接下来,我们定义函数hanoi(),它接收三个结构体:

void hanoi(struct S0 *s0,struct S1 *s1,struct S2 *s2){

int i;

int n = s0->n;

/*如果要移动的圆盘数量为1,则直接从s0柱子移动到s2柱子*/

if(n == 1) {

s2->a[s2->n] = s0->a[s0->n-1];

s2->n++;

s0->n--;

} else {

/*移动n-1个圆盘*/

hanoi(s0,s2,s1);

/*移动最大的圆盘*/

s2->a[s2->n] = s0->a[s0->n-1];

s2->n++;

s0->n--;

/*移动剩余的n-1个圆盘*/

hanoi(s1,s0,s2);

}

}

最后,我们定义函数main()来实现游戏的主要功能:

int main(){

struct S0 s0;

struct S1 s1;

struct S2 s2;

int i;

s0.n = 3; /*柱子s0的盘子的数量*/

for(i=0;i

s0.a[i] = s0.n-i; /*柱子s0的盘子从小到大排列*/

s1.n = 0;

s2.n = 0;

hanoi(&s0,&s1,&s2); /*执行算法*/

/*输出结果*/

printf("Result:\n");

printf("S1:");

for(i=0;i

printf("%d",s1.a[i]);

printf("\n");

printf("S2:");

for(i=0;i

printf("%d",s2.a[i]);

printf("\n");

}

到这里,我们完成了用C语言实现汉诺塔游戏的程序代码栈,最终能够以特定的顺序移动圆盘,从而实现汉诺塔的游戏目的。

打赏
海报

本文转载自互联网,旨在分享有价值的内容,文章如有侵权请联系删除,部分文章如未署名作者来源请联系我们及时备注,感谢您的支持。

转载请注明本文地址:http://atpbike.com/article/c/498.html

相关推荐

支付宝
微信
赞助本站