马踏棋盘分析文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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); /*不超过各个边缘时

相关文档
最新文档