zoukankan      html  css  js  c++  java
  • 【C语言】实现汉诺塔自动递归演示程序

    用C语言实现汉诺塔自动递归演示程序

     

    程序实现效果

    1.变界面大小依照输入递归数改变。

    2.汉诺塔自动移动演示。

    3.采用gotoxy实现流畅刷新。

    4.保留文字显示递归流程

    程序展示及实现

    github地址:https://github.com/404name/C-game

    0.主体思路

    输入要递归的汉诺塔数目,在原来的汉诺塔基础上新增move_play函数展示递归,用next数组存储每种移动状态。对应的从哪到哪可自动对应相应的移动方式自动移动。

    1.变界面大小依照输入递归数改变

    init函数按比例放大并且打印出图形界面。

    2.汉诺塔自动移动演示。

    int next[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; //上0 下1 左2 右3;

    int turn[2][3] = { {0,3,1},     //a -> b   b -> c a -> c 上右下
    {0,2,1}}; //b -> a c -> b c -> a 上左下

    next是移动方向,turn储存多种移动方向。

    例如后台读取到是  b -> c 则读取flag为 0对饮 turn【flag】的上右下

    然后依次把turn的3个值带入next实现先上当达到我设定的上界后改变第二次状态,向右达到右边设定的界限后向下移动到指定地方,结束一次移动。

    3.采用gotoxy实现流畅刷新。

    一开始我一直都是用cls清屏再打印,但这样刷屏很严重,后来甚至把gotoxy也一样用,后来我师傅,一位学长给我指点了下,我才发现,gotoxy是可以直接在已有图形上当作画笔一样改变,这样就实现了十分顺滑的运行。

    4.保留文字显示递归流程

    在屏幕下方同样用gotoxy移动到指定位置打印最基础的移动信息。

    总结

    这个程序是我觉得写的很巧妙的一个,本来一开始学汉诺塔时就想着为什么不能演示出来呢?但随着想象和现实相差太远,那时候我发现想很简单,但想出个框架与实现思路很难,怎么表示汉诺塔大小和如何让他自动移动是个很大的问题,后来学习了一些螺旋打印后就想到了用next去实现让他移动再加个数组存储他的移动方式,果然还是实现了。

     

  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/404name/p/12179326.html
Copyright © 2011-2022 走看看