数据结构 马踏棋盘 设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;