吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3405|回复: 8
收起左侧

[C&C++ 转载] [C语言][笔记]对汉诺塔的理解

[复制链接]
小可爱~ 发表于 2016-10-24 12:00
本帖最后由 小可爱~ 于 2016-10-24 12:01 编辑

有理解错误的地方请见谅并指出错误
[C] 纯文本查看 复制代码
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//汉诺塔
//最终目的:a --> c
static int flag = 0;
void printH(char a, char c)
{
        flag++;
        printf("%d:%c->%c\n", flag, a, c);
}

void hanoi(char a, char b, char c, int num)
{
        if (1 == num)
        {
                printH(a, c);
        }
        else
        {
                //将 a 上的盘子 借助 c 移动到 b
                hanoi(a, c, b, num - 1);
                //这个函数很好理解
                //当盘子只有一个的时候直接从 a 移动到 c-
                //当盘子多个的时候(假设两个), 看 (1) hanoi(a, c, b, num - 1); 这个调用  
                //这个时候 (2) void hanoi(char a, char b, char c, int num)
                //这上面的 a 对应 (1) 总的 a
                //(2)的b对应(1)c 
                //(2)的c对应(1)b
                //此时的 a -- a  b -- c  c -- b
                //函数printH(a, c);  a --> c
                //实质上是 a 移动到 b
                //printf 显示出来的 是  A->B  此时 num = 1;
                //这个时候再次调用 hanoi(a, c, b, num - 1);
                //就变成了 
                // a -- a
                // b -- b
                // c -- c
                //此时调用 printH(a, c); 就变成了 a->c  字符显示'A'->'C';
                printH(a, c);
                //将 b 上的盘子 借助 a 移动到 c
                //同理
                // b -> c
                hanoi(b, a, c, num - 1);
        }
        
}

int main(int argc, char *argv[])
{
        int ret = 0;
        char a = 'A';
        char b = 'B';
        char c = 'C';
        int num = 0;

        
        puts("请问需要几个碟子:");
        scanf("%d", &num);

        hanoi(a, b, c, num);
        
        system("pause");
        return ret;
}

免费评分

参与人数 1热心值 +1 收起 理由
Cizel + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

裴冰夏 发表于 2016-10-24 12:45
经典算法
LeiSir 发表于 2016-10-24 12:49
ykbest 发表于 2016-10-24 13:01
longhai001 发表于 2016-10-24 18:42
很好,很经典的算法
头像被屏蔽
沐雨红尘 发表于 2016-10-24 19:00
提示: 作者被禁止或删除 内容自动屏蔽
Zero丶冻结 发表于 2016-10-24 21:07
楼主厉害,虽然我不懂C
11212122 发表于 2016-10-24 21:21
主要就是练递归的,
19876 发表于 2016-10-24 21:30
楼主厉害,支持
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表