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去实现让他移动再加个数组存储他的移动方式,果然还是实现了。

     

  • 相关阅读:
    Codeforces Round #481 (Div. 3)题解
    陕西师范大学第七届程序设计竞赛网络同步赛题解
    Codeforces Round #479 (Div. 3)题解
    2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
    江西财经大学第一届程序设计竞赛题解
    2018年湘潭大学程序设计竞赛G又见斐波那契
    2018年长沙理工大学第十三届程序设计竞赛题解
    JDBC连接SQL server2014代码
    数据定义伪指令语句
    JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/404name/p/12179326.html
Copyright © 2011-2022 走看看