课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
模板
存档资料 成绩:
华东交通大学理工学院 课 程 设 计 报 告 书
所属课程名称 数据结构 题 目 骑士游历 分 院 电 信 分 院 专业班级 电商,1,班 学 号 学生姓名 指导教师
2012 年 6月 15 日
华东交通大学理工学院课程设计报告
目 录
第1章 课程设计内容及要求 .................................................. 1 第2章 课程设计目的 .............................................................. 1 第3章 程序
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
与设计 .......................................................... 2
3.1 创建骑士游历程序 ........................................................ 3
3.2 程序流程图 ................................................................... 3
3.3 骑士游历源程序 ........................................................... 4 第4章 运行结果 ...................................................................... 7 第5章 课程设计
心得
信息技术培训心得 下载关于七一讲话心得体会关于国企改革心得体会关于使用希沃白板的心得体会国培计划培训心得体会
.............................................................. 9 第6章 参考文献(资料) ...................................................... 9
华东交通大学理工学院课程设计报告
第1章 课程设计内容及要求
骑士游历即在国际象棋的棋盘(8行8列)放一个“马”,按“马走日字”的规则,马要走到棋盘上每一个格子,且每个格子只走一次。
可两至三个同学一组开展讨论与实施。
课程设计最终的
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
必须全部自己完成。
第2章 课程设计目的
程序设计实践课程设计是重要的综合性实践教学环节。通过该课程设
计,结合程序设计的理论,抽象和设计三种形态,进一步熟悉软件开发的
基本理论知识,了解软件的一般步骤,掌握软件开发的常用技巧,并且更
多的解决软件开发过程中常见问题的方法。运用所学的面向对象程序设计
的基本原理,基本知识和基本技巧,解决某一具体实际问题,培养我们综
合分析和解决问题的能力,并增强实践的操作能力。
1
华东交通大学理工学院课程设计报告
第3章 程序分析与设计
(1) 棋盘的表示方法
我们可以用一个8×8的二维数组A(I,J)来表示国际象棋的棋盘,在马还没有开始周游棋盘时,棋盘上所有的格都置为零。以后,马跳到哪个格,就将马跳跃的步数
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
在相应的空格里。
(2) 马的跳跃方向的确定
在国际象棋的棋盘上,一匹马共有八个可能的跳跃方向。
我们设置一组坐标增量来描述这八个条约方向:
? (1,2) ? (2,1)
? (2,-1) ? (1,-2)
? (-1,-2) ? (-2,-1)
? (-2,1) ? (-1,2)
(3) 马的跳跃方向的表示
设I表示行,J表示列,行增量为DI(R),列增量为DJ(R),则马向某个方向试探性地跳跃一步之后的新坐标应该表示为:NI=I+DI(R),NJ=J+DJR)。 (
(4) 朝某个方向试探性地跳跃一步再看下一步(取下一步最小可走方向(处里边角问题)),
任何一点的坐标加上要试探方向的坐标增量之后,都要判定一下是否已经超出了棋盘的边界。即:当I < 0,或I > 8,或J < 0,或J > 8时,都表示已经超出了棋盘的边界,这时,应该放弃该方向,转向试探下一个方向,在不出界的情况下,假如A(NI,NJ)=0,则表示该方向的前方有通路,可以继续向前跳跃。
假如A(NI,NJ)>0,则表示该格已经走过了,不能再走。放弃该方向,并转向下一个方向进行试探。
2
华东交通大学理工学院课程设计报告
3.1 创建骑士游历程序
在对Visual C++6.0的基本常识有了初步的了解后,就可以起步创建骑士游历程序
创建过程如下:
(1)单击桌面图标,启动Visual C++6.0软件进入一个新的工程界面。 (2)点击文件新建文件,再选择C/C++Header File,然后输入文件名点击“确定”就可以编写骑士游历程序了。
3.2 程序流程图
开始
输入起始位置(x1,y1)
进入Trail子程序
y>=m
输出 在下一列某行下的棋子
是否为正确位置
释放该结点指针
3
华东交通大学理工学院课程设计报告
3.3 骑士游历源程序
#include
int f[11][11] ; /*定义一个矩阵来模拟棋盘*/ int adjm[121][121];/*标志矩阵,即对于上述棋盘,依次进行编号
1--121(行优先)可以从一个棋盘格i跳到棋盘格j时,adjm[i][j]=1*/
void creatadjm(void); /*创建标志矩阵函数声明*/ void mark(int,int,int,int); /*将标志矩阵相应位置置1*/ void travel(int,int); /*巡游函数声明*/ int n,m; /*定义矩阵大小及标志矩阵的大小*/
/******************************主函数***********************************/
int main()
{
int i,j,k,l;
printf("Please input size of the chessboard: "); /*输入矩阵的大小值*/
scanf("%d",&n);
m=n*n;
creatadjm(); /*创建标志矩阵*/
puts("The sign matrix is:");
for(i=1;i<=m;i++) /*打印输出标志矩阵*/
{
for(j=1;j<=m;j++)
printf("%2d",adjm[i][j]);
printf("\n");
}
printf("Please input the knight's position (i,j): "); /*输入骑士的初始位置*/
scanf("%d %d",&i,&j);
l=(i-1)*n+j; /*骑士当前位置对应的标志矩阵的横坐标*/
while ((i>0)||(j>0)) /*对骑士位置的判断*/
{
for(i=1;i<=n;i++) /*棋盘矩阵初始化*/
for(j=1;j<=n;j++)
f[i][j]=0;
k=0; /*所跳步数计数*/
4
华东交通大学理工学院课程设计报告
travel(l,k); /*从i,j出发开始巡游*/
puts("The travel steps are:");
for(i=1;i<=n;i++) /*巡游完成后输出巡游过程*/
{
for(j=1;j<=n;j++)
printf("%4d",f[i][j]);
printf("\n");
}
printf("Please input the knight's position (i,j): ");/*为再次巡游输入起始位置*/
scanf("%d %d",&i,&j);
l=(i-1)*n+j;
}
puts("\n Press any key to quit... ");
getchar();
return 0;
}
/*****************************创建标志矩阵子函数*************************/
void creatadjm()
{
int i,j;
for(i=1;i<=n;i++) /*巡游矩阵初始化*/
for(j=1;j<=n;j++)
f[i][j]=0;
for(i=1;i<=m;i++) /*标志矩阵初始化*/
for(j=1;j<=m;j++)
adjm[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][j]==0) /*对所有符合条件的标志矩阵种元素置1*/
{
f[i][j]=1;
if((i+2<=n)&&(j+1<=n)) mark(i,j,i+2,j+1);
if((i+2<=n)&&(j-1>=1)) mark(i,j,i+2,j-1);
if((i-2>=1)&&(j+1<=n)) mark(i,j,i-2,j+1);
if((i-2>=1)&&(j-1>=1)) mark(i,j,i-2,j-1);
5
华东交通大学理工学院课程设计报告
if((j+2<=n)&&(i+1<=n)) mark(i,j,i+1,j+2);
if((j+2<=n)&&(i-1>=1)) mark(i,j,i-1,j+2);
if((j-2>=1)&&(i+1<=n)) mark(i,j,i+1,j-2);
if((j-2>=1)&&(i-1>=1)) mark(i,j,i-1,j-2);
}
return;
}
/*********************************巡游子函数
*******************************/ void travel(int p,int r)
{
int i,j,q;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][j]>r) f[i][j]=0; /*棋盘矩阵的置〉r时,置0*/
r=r+1; /*跳步计数加1*/
i=((p-1)/n)+1; /*还原棋盘矩阵的横坐标*/
j=((p-1)%n)+1; /*还原棋盘矩阵的纵坐标*/
f[i][j]=r; /*将f[i][j]做为第r跳步的目的地*/
for(q=1;q<=m;q++) /*从所有可能的情况出发,开始进行试探式巡游*/
{
i=((q-1)/n)+1;
j=((q-1)%n)+1;
if((adjm[p][q]==1)&&(f[i][j]==0))
travel(q,r); /*递归调用自身*/
}
return;
}
/*************************赋值子函数
***************************************/ void mark(int i1,int j1,int i2,int j2) {
6
华东交通大学理工学院课程设计报告
adjm[(i1-1)*n+j1][(i2-1)*n+j2]=1;
adjm[(i2-1)*n+j2][(i1-1)*n+j1]=1;
return;
}
第4章 运行结果
程序能正常运行,并得出正确的结果,其运行结果如下:
图4-1骑士游历游戏进入界面
7
华东交通大学理工学院课程设计报告
图4-2骑士游历游戏以(2,3)为起点运行图
图4-3骑士游历游戏以(3,4)为起点运行图
8
华东交通大学理工学院课程设计报告
第5章 课程设计心得
这两周的数据库课程设计,我收获了很多,学到了很多知识,同时也
发现自己很多的不足。
通过骑士游历程序设计,我对Visual C++6.0更加运用自如,程序代
码的编写,考验我们对课本知识的了解,运用。虽然Visual C++6.0运用
起来比较容易,但真正能够运行还是挺考验我们逻辑思维的,其实我们都
知道课程设计过程不是挺难的,就怕写源程序,必须要有认真,仔细,思
维灵活的头脑才不容易犯错,各种语句能够运用自如,如,循环语句,内
嵌语句等等,不过这好像没有用到复杂的语句,是用栈来实行的。
学习也是一件很快乐的事,当我们开始遇到很难的问题,通过自己不
断的努力解决了,我们那种幸福感是多么的强烈。
第6章 参考文献(资料)
[1] 谢希仁. 计算机网络(第五版)[M]. 北京:电子工业出版社,2008年2月 [2] 胡小强 计算机网络[M] 北京:北京邮电大学出版社2005年1月 [3] 严蔚敏 数据结构(c语言版) 北京:人民邮电出版社 2011年2月
9