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

上传人:b****6 文档编号:4559713 上传时间:2022-12-06 格式:DOCX 页数:10 大小:351.86KB
下载 相关 举报
马踏棋盘课程设计实验报告.docx_第1页
第1页 / 共10页
马踏棋盘课程设计实验报告.docx_第2页
第2页 / 共10页
马踏棋盘课程设计实验报告.docx_第3页
第3页 / 共10页
马踏棋盘课程设计实验报告.docx_第4页
第4页 / 共10页
马踏棋盘课程设计实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

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

《马踏棋盘课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《马踏棋盘课程设计实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

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

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

《数据结构》

课程名称:

《数据结构》课程设计

课程设计题目:

马踏棋盘

姓名:

邱可昉

院系:

计算机学院

专业:

计算机科学与技术

班级:

10052313

学号:

10051319

指导老师:

王立波

2012年5月18日

1.课程设计的目的3

2•问题分析3

3.课程设计报告内容3

(1)概要设计3

(2)详细设计3

(3)测试结果5

(4)程序清单6

4.个人小结10

1.课程设计的目的

《数据结构》是计算机软件的一门基础课程,计算机科学各领域及有关的应用软件都要用到各种类型的数据结构。

学好数据结构对掌握实际编程能力是很有帮助的。

为了学好《数据结构》,必须编写一些在特定数据结构上的算法,通过上机调试,才能更好地掌握各种数据结构及其特点,同时提高解决计算机应用实际问题的能力。

2.问题分析

*问题描述:

将马随机放在国际象棋的8X8棋盘Bo阿rd[0..7,0..7]的某个方格中,马按走

棋规则进行移动。

要求每个方格上只进入一次,走遍棋盘上全部64个方格。

编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入8X8的方阵

输出之。

*测试数据:

由读者指定,可自行指定一个马的初始位置。

*实现提示:

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

并探讨每次选择位置的“最佳策略”,以减少回溯的次数。

3.课程设计报告内容

(1)概要设计

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

(2)详细设计

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

structPoint

{

intx;//记录横坐标

inty;//记录纵坐标

intfrom;//前一个位置的方向

};

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

}

Qipan:

:

~Qipan(){//销毁棋盘

}

voidQipan:

:

Setside(Pointcur){//根据输入的当前点设置下一个点的可能方

向坐标

个点

I八、、

x和y:

"<

11"<

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

cout<<"输入:

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

//定义Qipan类的对象A//A运行函数HorseVisit

}begin.x--;begin.y--;begin.from=0;QipanA;s=A.HorseVisit(begin);

}return0;

(3)测试结果

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

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

115&7亍扯舟

马踏棋盘的路线为*11833

1427102G31372212

2次

5060432691?

21734495942占354158&24629

61&313754644732155112B45G2563?

243@36

5363钿38214148234055615157

您是否需更继续运行该程序3—继续土叶-退岀):

请麵人马的初始位置*和y;

具电-8,i0T11

4^-\

wA:

ii

10253916

马渚棋盘的路线为百11S3350仙43269192122?

442717344959S3&34&36

422S354158526256392^171332S10^314923403045281151S3222

37476454483116£2L3»砧615157

您是否需曼继续运行该程序(V—继统小一退出):

.

又测试了其他几个点得出一次死路退栈5次能尽量少的减少退栈次数

其他几个点的数据

请嶽入马的初始俚置x和y;

县中l<=x^y<=8,如;11

输入r22

187270

马踏楫盘的路线均:

1H2S42S7S13417111182R4S3F41SHS24(;29122193

G2693293?

2?

3350G9434?

5?

5363483121414823616225153238

4461EE403Q137243954G44?

£25G

會是否需要継续运行该程序(旷理续"一退岀八

44615S4030137243954644?

G2隅否需要纟險运彳二该程序@纟除“退出)闿胡审入马的初贻隹置*和卯!

其中丄<=心H-6,如:

11輸人言3

113970

馬建棋盘的丄密先为:

19217344959533B26S3181112843335060453525

425?

石14159526256392?

1222325203?

2?

10142d7133047&45

4461466348311&621395540239

恣是否需要£蟻运行该程序(旷權续“一退岀):

 

(4)程序清单

#include

#inelude"SqStack.h"

usingnamespacestd;

#defineMAXSIZE70

#defineN8

structPoint

{

intx;//记录横坐标

inty;//记录纵坐标

intfrom;//前一个位置的方向};

Pointside[8]={0,0,0};//

记录可能的方向坐标

classQipan{

public:

Qipan();

~Qipan();

voidSetside(Point);boolGetside(int,Point&);boolHorseVisit(Point);boolPass(Point);

private:

int**gezi;

};

Qipan:

:

Qipan(){

inti,j;

gezi=newint*[N];for(i=0;i

}

for(i=0;i

for(j=0;j

}

Qipan:

:

~Qipan(){

for(inti=0;i

}if(gezi==NULL)delete[]gezi;

}

voidQipan:

:

Setside(Pointcur){//

//设置方向坐标

//将指定方向的坐标给特定指针

//输入开始点运行棋盘

//输出路径

//棋盘格子

//构造函数构建棋盘

//销毁棋盘

根据输入的当前点设置下一个点的可能方向坐标

 

Pointround[]={{cur.x-2,cur.y-1,0},{cur.x-1,cur.y-2,0},

{cur.x+1,cur.y-2,0},{cur.x+2,cur.y-1,0},{cur.x+2,cur.y+1,0},

{cur.x+1,cur.y+2,0},{cur.x-1,cur.y+2,0},{cur.x-2,cur.y+1,0},};

for(inti=0;i<8;i++){

side[i].x=round[i].x;

side[i].y=round[i].y;

next.from=0;horseVisit.Push(next);

break;

}

if(!

flag){的格子,则退栈5次intj=0;

while(j<5&&horseVisit.Length()>1){化,退栈次数比较少

if(yn=='y'||yn=='Y')s=true;

elses=false;

returns;

}

intmain(){

bools=true;

while(s){

intcount=0;

intgezi[8][8]={0};

Pointbegin;

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

";cout<

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

11"<

";

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,如:

11"<

cout<<"输入:

";

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

}

begin.x--;

begin.y--;

begin.from=0;

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

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

}

return0;

}

4.个人小结

这是第二次写数据结构课程设计的代码,相对于第一次的生疏,这次已经能比较熟练地知晓题目应该如何编写的框架了,但具体实现的想法还是在网络中寻找了思路,然后写出了代码,一开始调试时一直出错,结果是自己在一个while循环的判断条件处多加了一个“!

”,这导致了我一直无法运行起程序,后来在自习检查代码后发现了这一点,由此看出,数据结构编写程序不仅要对学习的只是能够灵活运用在编写代码的时候还要仔细仔细再仔细。

我要在以后的学习中注意以下几点:

1.认真上好专业课,多在实践中锻炼自己。

2.写程序要考虑周到,严密。

3.在做设计的时候要有信心,有耐心,不浮躁。

4.认真学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。

5.在课余时间多写程序,熟练掌握在调试程序过程中常见的错误,一边节约调试程序的时间。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1