数据结构编程-汉诺塔

上传人:mg****85 文档编号:34320532 上传时间:2018-02-23 格式:DOC 页数:10 大小:84KB
返回 下载 相关 举报
数据结构编程-汉诺塔_第1页
第1页 / 共10页
数据结构编程-汉诺塔_第2页
第2页 / 共10页
数据结构编程-汉诺塔_第3页
第3页 / 共10页
数据结构编程-汉诺塔_第4页
第4页 / 共10页
数据结构编程-汉诺塔_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《数据结构编程-汉诺塔》由会员分享,可在线阅读,更多相关《数据结构编程-汉诺塔(10页珍藏版)》请在金锄头文库上搜索。

1、数据结构课程Project 3汉诺塔Type:IndividualProgrammer: Tester:Report Writer: Date of completion:2010/11/10第一章: 绪论问题背景描述汉诺塔游戏是这样的:有三个桩(桩 1,桩 2 和桩 3)和 N 个半径不同的盘子。初始所有的盘子按半径从小到大堆叠在桩 1 上,半径最小的盘子在最上面。规则:每次只可以移动一个桩上最顶端的盘子到另一个桩上,而且不可以把大盘子堆在小盘子上。问题是要把所有盘子移动到桩 3 上。每次用两个整数 a (1 #include#define STACKSIZE 10 /*动态分配堆栈存储量*

2、/FILE *fp_in = NULL; /*输入文件指针*/FILE *fp_out = NULL; /*输出文件指针*/typedef struct int *base;int *top;int stacksize;stack; /*定义堆栈*/stack initstack(stack stake)stake.base=(int*)malloc(STACKSIZE*sizeof(int);if(!stake.base) exit(0);stake.top=stake.base;stake.stacksize=STACKSIZE;return stake; /*堆栈初始化*/stack p

3、ush(stack stake,int plate)*stake.top+=plate;return stake; /*将 plate 压入堆栈*/stack pop(stack stake)if(stake.top!=stake.base) -stake.top;return stake; /*将栈顶元素弹出*/int getplate(stack stake)if(stake.top=stake.base) return 0;else return *(stake.top-1); /*若栈不空则返回栈顶元素,否则返回 0*/void destroysk(stack stake)free(s

4、take.base); /*销毁栈*/void func(int n,int m) /*操作函数,处理一个测试样例*/int j=n,k=1,i,from,to,plate,topplate,law=1;stack stake3; /*定义一个栈顶数组*/for(i=0;i=1;j-) /*将 n 个盘子从大到小放入桩 1*/stake0=push(stake0,j);for(k=1;k=topplate&topplate!=0)fprintf(fp_out, -%dn,k);law=0;break; /*如果被移盘子号比目的桩原顶层盘大,无效移动,输出-k*/staketo-1=push(staketo-1,plate); /*将盘子移入该桩*/if(stake2.top-stake2.base)=n)fprintf(fp_out, %dn,k);break; /*成功将桩 1 所有盘子移到桩 3,输出k*/if(k#define N 4void main()int i,j,k,t;printf(大小为:%dn,N);for(j=0;jN;j+)for(i=0;iN;i+)t=(i+j)%N;for(k=0;kN;k+)printf(%d,(k+t)%N+1);printf(n);printf(n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号