栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

用栈模拟汉诺塔并给出解决的c语言实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用栈模拟汉诺塔并给出解决的c语言实现

#include 
#include 

//元素elem进栈
int push(int* a, int top, int elem) {
    top++;
    a[top] = elem;
    //printf("%d被压栈了nn", elem);
    return top;
}
//数据元素出栈
int pop(int* a, int top) {
    if (top == -1) {
        printf("空栈");
        return -1;
    }
    //printf("弹栈元素:%dn", a[top]);
    top--;
    return top;
}

int main() {
    void Hanoi(int* stack1, int* stack2, int* stack3, int n, int top1, int top2, int top3,
        char,char,char);
    int stack1[3] = {2,1,0};//第一座塔
    int stack2[3];//第二座塔
    int stack3[3];//第三座塔
    //初始的汉诺塔
    
    int top1 = 2;//标记第一个塔的顶部
    int top2 = -1;
    int top3 = -1;
    
    char a = 'a';//代表第一个塔
    char b = 'b';//代表第二个塔
    char c = 'c';//代表第三个塔

    Hanoi(stack1, stack2, stack3, 3, top1, top2, top3,a,b,c);
    for (int i = 0; i < 3; i++)
    {
        printf("%dn", stack3[i]);
    }
}

void Hanoi(int* stack1, int* stack2, int* stack3, int n, int top1, int top2, int top3,
    char a,char b,char c)
{
    if (n > 1) 
    {
        Hanoi(stack1, stack3, stack2, n - 1, top1, top3, top2,a,c,b);
        top1 = top1 - n + 1;
        top2 = top2 + n - 1;
        int temp = stack1[top1];
        top1 = pop(stack1, top1);
        top3 = push(stack3, top3, temp);
        printf("将%c中的%d移动到%c中n", a, temp, c);
        Hanoi(stack2, stack1, stack3, n - 1, top2, top1, top3,b,a,c);

    }
    else
    {
        int temp = stack1[top1];
        top1 = pop(stack1, top1);
        top3 = push(stack3, top3, temp);
        printf("将%c中的%d移动到%c中n", a, temp, c);
    }
}

 修改输入的汉诺塔层数需要修改stack1内的元素和top1的值,top1指向stack1的最后一个元素

在程序输出中,a代表第一座塔,b代表第二座塔,以此类推。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号