持之-以恒 2022-07-06 09:38 采纳率: 100%
浏览 15
已结题

汉诺塔的相关问题,代码如何修改补全呢

汉诺塔的相关问题的处理,如下代码如何完成呢?
并给出相应的代码注释,谢谢了

#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
struct H
{
    int data[15];/*存放每个盘的代号*/
    int top;/*每个塔的具体高度*/
}num[3];/*三个塔*/
void move(char x, char y, struct H num[3]);/*移动的具体过程*/
void hanoi(char x, char y, char z, int n, struct H num[3]);/*递归*/
void Init(void);/*初始化*/
void Close(void);/*图形关闭*/
int computer = 1;/*自动控制与手动控制的标志*/
int speed = 0;/*全局变量speed主要是演示过程的速度*/
void main(void)
{
    Init();/*初始状态*/
    Close();/*图形关闭*/
    exit(0);
}
void Init(void)/*初始化*/
{
    int i, n, color;
    system("cls");
    printf("please input n(n<=10): ");/*输入要演示的盘子数*/
    scanf("%d", &n);
    printf("Please input 1 or 2:\n1.computer 2.people\n");
    scanf("%d", &i);
    if (i == 2)/*选择手动控制标志为0*/
        computer = 0;
    if (n < 1 || n>10)
        n = 10;/*越界的话n当10处理*/
    if (computer)/*如果是自动控制的话输入速度*/
    {
        printf("please input speed: ");/*输入速度*/
        scanf("%d", &speed);
    }
    initgraph(640, 480);
    cleardevice();
    for (i = 0; i < 3; i++)
        num[i].top = -1;/*三个地方的高度开始都为-1*/
    for (i = 0; i < n; i++)/*画一开始的塔座A上的盘子*/
    {
        num[0].top++;/*栈的高度加1*/
        num[0].data[num[0].top] = i; /*最大的盘子代号为0,依次为1,2,…n-1*/
        color = num[0].data[num[0].top] + 1;/*盘子的颜色代码为栈顶盘子代号加1*/
        setfillstyle(SOLID_FILL, color);
        bar(100 - (33 - 3 * num[0].data[num[0].top]), 400 - 20 * i - 8, 100 +
            (33 - 3 * num[0].data[num[0].top]), 400 - 20 * i + 8); /*画矩形*/
    }
    setcolor(YELLOW);
    outtextxy(180, 450, "any key to continue");

    LOGFONT f;
    gettextstyle(&f);// 获取当前字体设置
    f.lfHeight = 48;// 设置字体高度为 48
    _tcscpy(f.lfFaceName, _T("黑体"));// 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
    f.lfQuality = ANTIALIASED_QUALITY;// 设置输出效果为抗锯齿
    settextstyle(&f);// 设置字体样式

    outtextxy(90, 420, "A"); /*塔座标志*/
    outtextxy(240, 420, "B");
    outtextxy(390, 420, "C");
    _getch();/*接收字符后就执行递归操作*/
    hanoi('a', 'b', 'c', n, num);
}
void move(char x, char y, struct H num[3])/*移动的具体过程*/
{

}
void hanoi(char one, char two, char three, int n, struct H num[3])/*递归n为盘子数,num为堆栈*/
{

}
void Close(void)/*图形关闭*/
{
    _getch();
    closegraph();
}


  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月14日
    • 修改了问题 7月6日
    • 创建了问题 7月6日

    悬赏问题

    • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
    • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
    • ¥15 请各位帮我看看是哪里出了问题
    • ¥15 vs2019的js智能提示
    • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
    • ¥15 uniapp的h5项目写一个抽奖动画
    • ¥15 hadoop中启动hive报错如下怎么解决
    • ¥15 如何优化QWebEngineView 加载url的速度
    • ¥15 关于#hadoop#的问题,请各位专家解答!
    • ¥15 如何批量抓取网站信息