数据结构 马踏棋盘 设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》

课程设计报告

课程名称:《数据结构》课程设计课程设计题目:

姓名:

院系:

专业:

年级:

学号:

指导教师:

2011年月日

目录

1、程序设计的目的

2、设计题目

3、分析

4、设计思想

5、算法

6、测试结果

7、调试分析

8、小结

1、课程设计的目的

1、熟练使用C++语言编写程序,解决实际问题;

2、了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

3、初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

4、提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

5、学习并熟悉栈的有关操作;

6、利用栈实现实际问题;

2、设计题目

【马踏棋盘】

*问题描述:将马随机放在国际象棋的8X8棋盘Bo阿rd[0..7,0..7]的某个方格中,马按走棋规则进行移动。要求每个方格上只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入8X8的方阵输出之。

*测试数据:由读者指定,可自行指定一个马的初始位置。

*实现提示:每次在多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”(悔棋)使用。并探讨每次选择位置的“最佳

策略”,以减少回溯的次数。

3、分析

确定输入值的范围,输入马的初始行坐标X和Y,X和Y的范围都是1到8之间。程序的功能是输出马走的步骤,要使马从任一起点出发,通过程序能找到下一个地点,然后遍历整个棋盘。每次在多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”(悔棋)使用。并探讨每次选择位置的“最佳策略”,以减少回溯的次数。输出时可以用二维数组。

4、设计思想

输入马初始位置的坐标。将初始位置进栈,经过一个while循环,取出符合条件的栈顶元素。利用函数,找出栈顶元素周围未被占用的新位置,如果有,新位置入栈;否则弹出栈顶元素。再进行判断,最后输出。

位置的存储方式,栈的存储方式和一些操作函数为:

#include

#ifndef STACK_H

#define STACK_H

struct Point

{

int x;

int y;

int from;

};

#define STACKSIZE 70

#define STACKINCREASE 10

struct Stack

{

Point *top;

Point *base;

int length;

};

bool Initstack(Stack &s);

bool Push(Stack &s,Point e);

bool Pop(Stack &s,Point &e);

void DestroyStack(Stack &s);

bool StackEmpty(Stack S);

bool GetTop(Stack S,Point &e);

int GetDeep(Stack S);

#endif

5、算法

#include

#ifndef STACK_H

#define STACK_H

struct Point

{

int x;

int y;

int from;

};

#define STACKSIZE 70 #define STACKINCREASE 10 struct Stack

{

Point *top;

Point *base;

int length;

};

bool Initstack(Stack &s);

bool Push(Stack &s,Point e);

bool Pop(Stack &s,Point &e);

void DestroyStack(Stack &s);

bool StackEmpty(Stack S);

bool GetTop(Stack S,Point &e);

int GetDeep(Stack S);

#endif

#include"stack.h"

bool Initstack(Stack &s)

{//构造一个空栈 S

s.base = (Point*)malloc(STACKSIZE*sizeof(Point));

if(!s.base)return false;

s.length = STACKSIZE;

s.top = s.base;

return true;

}

bool Push(Stack &s,Point e)

{//插入元素 e为新的栈顶元素

if(s.top - s.base >= s.length)

{

s.base = (Point*)realloc(s.base, (s.length+STACKINCREASE)*sizeof(Point)); if(!s.base)return false;

s.length +=STACKINCREASE;

s.top = s.base + s.length;

}

(*s.top).x = e.x;

(*s.top).y = e.y;

相关文档
最新文档