资源描述:
《实验报告-马踏棋盘.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、2.4题马踏棋盘题目:设计一个国际象棋的马踏棋盘的演示程序班级:姓名:学号:完成日期:一.需求分析(1) 输入的形式和输入值的范围:输入马的初始行坐标X和列坐标Y,X和Y的范围都是[1,8]。 (2) 输出形式: 以数组下表的形式输入,i为行标,j为列标,用空格符号隔开。 以棋盘形式输出,每一格打印马走的步数,这种方式比较直观 (3) 程序所能达到的功能:让马从任意起点出发都能够遍历整个8*8的棋盘。 (4) 测试数据,包括正确输入及输出结果和含有错误的输入及其输出结果。数据可以任定,只要1<=x,y<=8就可以了。 正确的输出结果为一个二维
2、数组,每个元素的值表示马行走的第几步,若输入有错,则程序会显示:“输入有误!请重新输入……”并且要求用户重新输入数据,直至输入正确为止。二.概要设计(1)、位置的存储表示方式(2) typedef struct { int x; int y; int from; }Point; (2)、栈的存储方式 #define STACKSIZE 70 #define STACKINCREASE 10 typedef struct Stack { Point *top; Point
3、*base; int stacksize; };(1)、设定栈的抽象数据类型定义: ADT Stack { 数据对象:D={ai
4、 ai∈ElemSet,i=1,2,„,n,n≥0} 数据关系:R1={
5、ai-1, ai∈D,i=2,„,n} 约定an端为栈顶,ai端为栈顶。 基本操作: InitStack(&s) 操作结果:构造一个空栈s, DestroyStack(&s) 初始条件:栈s
6、已存在。 操作结果:栈s被销毁。 ClearStack(&s) 初始条件:栈s已存在。 操作结果:栈s清为空栈。 StackEmpty(&s) 初始条件:栈s已存在。 操作结果:若栈s为空栈,则返回TRUE,否则返回FALSE。 StackLength(s); 初始条件:栈s存在。 操作结果:返回s的元素个数,即栈的长度。 GetTo
7、p (s,&e); 初始条件:栈s已存在且非空。 操作结果:用e返回s的栈顶元素。 Push(&s,e) 初始条件:栈s已存在。 操作结果:插入元素e为新的栈顶元素。 Pop(&s,&e) 初始条件:栈s存在且非空。 操作结果:删除栈顶元素,并用e返回。 stackTraverse(s,visit()) 初始条件:栈s存在且非空。 操作结果:从栈底到栈顶依次对s的每
8、个元素调用visit()。一旦visit()失败,则操作失败。 }ADT Stack本程序包含模块: 1、主程序模块:void main(){定义变量;接受命令;处理命令;退出;}2、起始坐标函数模块——马儿在棋盘上的起始位置; 3、探寻路径函数模块——马儿每个方向进行尝试,直到试完整个棋盘;4、输出路径函数模块——输出马儿行走的路径; 三.详细设计1.函数声明 VoidInitLocation(intxi,int yi); //马儿在棋盘上的起始位置标 int TryPath(int i,int j); //马儿每个方向
9、进行尝试,直到试完整个棋盘 void Display(); //输出马儿行走的路径 2. 起始坐标函数模块 void InitLocation(int xi,int yi) { int x,y; //定义棋盘的横纵坐标变量 top++; //栈指针指向第一个栈首 stack[top].i=xi; //将起始位置的横坐标进栈 stack[top].j=yi; //将起始位置的纵坐标进栈 stack[top].
10、director=-1; //将起始位置的尝试方向赋初值 board[xi][yi]=top+1; //标记棋盘 x=stack[top].i;