马踏棋盘分析文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
题目:马踏棋盘
院系:
班级:
学号:
姓名:
2014-2015年度第1学期
马踏棋盘
一.题目:马踏棋盘 (3)
二. 设计目标 (3)
三. 问题描述 (3)
四. 需求分析 (4)
五. 概要设计 (4)
第一步:定义四个常量和一个数据类型 (4)
第二步:构造函数 (4)
六. 详细设计(给出算法的伪码描述和流程图) (5)
流程图设计 (5)
代码分析 (9)
第一步:定义常量与变量 (9)
第二步:构造函数 (9)
●定义一个结构体类型 (9)
●创建一个初始化函数 (10)
●创建提示输入函数 (10)
●创建产生新节点函数 (11)
●创建计算路径函数 (12)
●创建入栈函数 (13)
●创建出栈函数 (13)
●创建输出函数 (13)
第三步:在主函数中调用其它函数 (15)
七. 测试分析 (16)
八. 使用说明 (16)
九. 测试数据 (16)
十.课程设计总结 (17)
一.题目:马踏棋盘
二. 设计目标
帮助学生熟练掌握顺序栈的基本操作,让学生深入了解栈的使
用,使得更深层次的灵活运用栈。
三. 问题描述
○所谓的马踏棋盘是:将马随机放在国际象棋的8×8棋盘的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。由用户自行指定一个马的初始位置,求出马的行走路线,并按照求出的行走路线的顺序,将数字1、2、…、64依次填入一个8X8的方阵并输出。
从用户给出的初始位置开始判断,按照顺时针顺序,每次产生一个新的路点,并验证此路点的可用性,需要考虑的是当前路点是否超出棋盘范围和此路点是否已经走过。如果新路点可用,则入栈,并执行下一步,重复进行如上步骤,每次按照已走路点的位置生成新路点。如果一个路点的可扩展路数为0,进行回溯,直到找到一个马能踏遍棋盘的行走路线并输出。
四. 需求分析
1. 让用户输入马的初始位置;
2. 按照马的行走路线,判断马是否能够走遍整个棋盘;
3. 输出结果(若能走遍,则输出马的行走路线,若不能,提示用户“此时不能踏遍棋盘上所有点!”)
五. 概要设计
为了实现上述程序功能,程序包含以下几大模块:
第一步:定义四个常量和一个数据类型:
MAXNUM、INVALIDDIR、MAXLEN、MAXDIR、HorsePoint 第二步:构造函数:
void Initial() //初始化函数;
void PushStack(HorsePoint positon) //入栈函数;HorsePoint GetInitPoint() //请求用户输入函数;HorsePoint GetNewPoint(HorsePoint *parent) //产生新节点函数;
void CalcPoint(HorsePoint hh) //计算路径的函数;
void PrintChess() //输出函数;
int main(int argc,char* argv[]) //主函数
六. 详细设计(给出算法的伪码描述和流程图)总体操作步骤如下:
流程图设计:
代码分析:
第一步:定义常量与变量:
常量:
MAXNUM 8 ---------- /*横纵格数的最大值*/
INVALIDDIR -1 ---------- /*无路可走的情况*/
MAXLEN 64 ---------- /*棋盘总个数*/
MAXDIR 8 ---------- /*下一步可走的方向*/ 变量:
HorsePoint ChessPath[MAXLEN] /*模拟路径栈*/
Int count /*入栈节点个数*/
int ChessBoard[MAXNUM][MAXNUM] /*标志棋盘数组*/ 第二步:构造函数:
为了明确马将要走的路线,我们必须定义一个结构体类型:
typedef struct
{
int x; /*表示横坐标*/
int y; /*表示纵坐标*/
int direction; /*表示移动方向*/ }HorsePoint;
●创建一个初始化函数:
void Initial() /
{
int i,j;
for(i=0;i for(j=0;j ChessBoard[i][j]=0; /*棋盘格均初始化为0,代表没走过*/ for(i=0;i { ChessPath[i].x=0; ChessPath[i].y=0; ChessPath[i].direction=INVALIDDIR; } count=0; /*栈中最初没有元素*/ } ●创建提示输入函数 HorsePoint GetInitPoint() { HorsePoint positon; do { printf("\n请输入起始点(y,x):"); scanf("%d,%d",&positon.x,&positon.y); printf("\n请稍等......\n"); printf("\n\n"); }while(positon.x>=MAXNUM || positon.y>=MAXNUM || positon.x<0 || positon.y<0); /*不超过各个边缘时