首页 > 编程知识 正文

c语言解决汉诺塔问题,解决汉诺塔问题的C语言算法

时间:2023-05-04 11:12:26 阅读:194879 作者:4751

汉诺塔问题简述:有三根柱子,编号分别为a,b,c,a柱子自下而上、由大到小按顺序放置n个圆盘,实现将a柱上的圆盘全部移到c柱上,并仍保持原有顺序叠好。移动规则:每次只能移动一个圆盘,并且在移动过程中三根柱上都始终保持大盘在下,小盘在上,移动过程中圆盘可以置于a,b,c任一根柱子上。

解题思想:

(1)以c柱为中介,先将n-1个圆盘按规则从a柱移动到b柱上;

(2)将最底层的圆盘移动到c柱上;

(3)以a柱为中介,将b柱上的n-1个圆盘按规则移动到c柱上。

c语言简单实现如下:

#include <stdio.h>void main(){    void move(char, char);//移动盘子     void TowerOfHanoi(int, char, char, char);//汉诺塔函数         int n;    char t1 = 'a', t2 = 'b', t3 = 'c';        printf("input the number of plates:");    scanf("%d", &n);    printf("the results are as follows:n");    TowerOfHanoi(n, t1, t2, t3);}void TowerOfHanoi(int m, char t1, char t2, char t3){    //圆盘数目m,圆柱 t1,t2,t3    void move(char x, char y);        if(m == 1)        move(t1, t3);    else    {        TowerOfHanoi(m-1, t1, t3, t2);//将m-1个圆盘从t1移动到t2         move(t1, t3);//将最底层的圆盘移动到t3         TowerOfHanoi(m-1, t2, t1, t3); //将m-1个圆盘从t2移动到t3     }    }void move(char x, char y){    printf("%c-->%cn", x, y);}

运行结果(以圆盘数目1,2,3为例):

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。