C语言实践答辩 ,求注释。明天答辩了,什么都不懂的小白一个,抽到汉诺塔的编程。求跟完整的注释

#include<stdio.h>#include<stdlib.h>#include<windows.h>intDISK_NUM;//总盘数int*disk[3];//... #include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int DISK_NUM; //总盘数
int *disk[3]; //盘子分布信息
int diskNum[3]; //每柱现有盘数

const char* COLUMN_NAMES = "abc"; //柱名称,显示时转换,运算时用0/1/2
void move(int from,int offset,int to);
void show(int step,int from,int to,int diskNo);

int main()
{
int i;

printf("欢迎使用汉诺塔文字动画演示程序\n\n");
printf("请输入盘片数量:");
scanf("%d",&DISK_NUM);

//初始化盘分布
//盘片按从下至上的顺序排列,分别保存在disk[i]
//最初盘片全部排列在0柱
for(i=0;i<3;i++)
disk[i] = (int*)malloc(DISK_NUM * sizeof(int));

for(i=0; i<DISK_NUM; i++)
disk[0][i] = DISK_NUM - i;

diskNum[0] = DISK_NUM;
diskNum[1] = diskNum[2] = 0;

show(0,0,0,0); //初始显示
move(0,0,2); //将所有盘子自0柱移至2柱

for(i=0;i<3;i++)
free(disk[i]);
return 0;
}

COORD coord = {0, 3};

void show(int step,int from,int to,int diskNo)
{
#define BAR_CHAR '-'
int i,j,k,col;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

for(i=0; i<DISK_NUM; i++) //按行循环
{
col = DISK_NUM - 1 - i; //盘子保存顺序与显示顺序相反,处理一下
printf(" ");
for(j=0; j<3; j++) //按柱循环
{
for(k=0; k<DISK_NUM*2+1; k++) //按显示位置循环
{
printf("%c",col<diskNum[j] && k>=(DISK_NUM-disk[j][col]) && k<=(DISK_NUM+disk[j][col]) ? BAR_CHAR : ' ');
}
}
printf("\n");
}
if(step > 0)
printf("step%3d: %2d. %c -> %c\n",step,diskNo+1,COLUMN_NAMES[from],COLUMN_NAMES[to]);

Sleep(500);
}

void move(int from,int offset,int to)
{
static int step = 0;
int tmp = 3 - from - to; //第三柱编号
int num = diskNum[from] - offset; //要移动的盘数
int current; //当前移动的盘编号,用于显示

if(num == 1) //仅移动一片,直接移动
{
current = disk[to][diskNum[to]++] = disk[from][--diskNum[from]];
step++;

show(step,from,to,current);
}
else
{
move(from,offset+1,tmp);
move(from,offset,to);
move(tmp,diskNum[tmp] - (num-1),to);
}
}
展开
 我来答
帐号已注销
2016-12-27 · 超过30用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:44.1万
展开全部

推荐你看这篇文章,其实就是层层回推的一个过程.

http://www.360doc.com/content/13/0121/20/10086564_261627221.shtml

追问
我是想要上面那个注释
我是想要上面那个注释
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式