马踏棋盘课程设计实验报告

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

马踏棋盘课程设计实验报告

《数据结构》

课程名称: 《数据结构》课程设计课程设计题目: 马踏棋盘姓名: 邱可昉

院系: 计算机学院专业: 计算机科学与技术班级: 10052313 学号: 10051319 指导老师: 王立波

2012年5月18日

1

目录

1.课程设计的目的...............................................................3 2.问题分析........................................................................3 3.课程设计报告内容 (3)

(1)概要设计 (3)

(2)详细设计 (3)

(3)测试结果 (5)

(4)程序清单...............................................................6 4.个人小结 (10)

2

1.课程设计的目的

《数据结构》是计算机软件的一门基础课程,计算机科学各领域及有关的应用软件都要用到各种类型的数据结构。学好数据结构对掌握实际编程能力是很有帮助的。为了学好《数据结构》,必须编写一些在特定数据结构上的算法,通过上机调试,才能更好地掌握各种数据结构及其特点,同时提高解决计算机应用实际问题的能力。

2.问题分析

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

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

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

3.课程设计报告内容

(1)概要设计

定义一张棋盘,定义一个栈保存马走的路径的点坐标和来自方向,用函数计算周围可走坐标,并检查正确性,当周围没有可走格子时退栈到最优位置,继续进行,然后将路径输出。 (2)详细设计

定义结构体,方向数组和Qioan类

struct Point

{

int x; //记录横坐标

int y; //记录纵坐标

int from; //前一个位置的方向

};

Point side[8]={0,0,0}; //记录可能的方向坐标

class Qipan{

public:

Qipan();

~Qipan();

void Setside(Point); //设置方向坐标

bool Getside(int,Point &); //将指定方向的坐标给特定指针bool HorseVisit(Point); //输入开始点运行棋盘

bool Pass(Point); //输出路径

private:

int **gezi; //棋盘格子

};

3

然后对每个函数进行定义

Qipan::Qipan(){ //构造函数构建棋盘

……

}

Qipan::~Qipan(){ //销毁棋盘

……

}

void Qipan::Setside(Point cur){ //根据输入的当前点设置下一个点的可能方

向坐标

……

}

bool Qipan::Getside(int i,Point &next ) { //根据方向把将坐标赋给下一个点

……

}

bool Qipan::HorseVisit(Point begin){ //棋盘运行

……

}

最后是主函数,设计一些用户界面

int main(){

bool s=true;

while(s){

int count=0;

int gezi[8][8]={0};

Point begin;

cout<<"请输入马的初始位置x和y:";

cout<

cout<<"其中1<=x,y<=8,如:1 1 "<

cout<<"输入:" ;

cin>>begin.x>>begin.y; //输入起始点,并判断正确性

while(begin.x>8||begin.x<1||begin.y>8||begin.y<1){ cout<<"输入有误,请重新输入x和y:"<

cout<<"其中1<=x,y<=8,如:1 1 "<

cout<<"输入:" ;

cin>>begin.x>>begin.y;

}

begin.x--;

begin.y--;

begin.from=0;

Qipan A; //定义Qipan类的对象A

s=A.HorseVisit(begin); //A运行函数HorseVisit

}

return 0;

}

4

(3)测试结果

对于一次死路后退栈次数进行测试

1次用时很长且为运行出来 2次

3次

相关文档
最新文档