骑士游历骑士巡游C语言课程设计Word格式.docx
- 文档编号:18608561
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:10
- 大小:86.71KB
骑士游历骑士巡游C语言课程设计Word格式.docx
《骑士游历骑士巡游C语言课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《骑士游历骑士巡游C语言课程设计Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
3.2系统测试与调试3
第4章源代码6
第5章课程设计心得9
第6章参考文献10
第1章课程设计内容及要求
运行程序设置一个8行8列的棋盘,在国际象棋的原则下,任意的输入一个存在的点,这个被视为骑士(马)的初始位置,让马通过这个点走完棋盘上的每一个点,并且不重复。
在对已经走过的路线里,采用标志矩阵进行记录。
标志矩阵的引入利用了数据的线性存储。
这个称为骑士游历算法。
本课程设计所采用的计算机语言是C语言,所使用的软件是使用比较普遍的MicrosoftVisualC++软件。
第2章功能的说明与实现
2.1程序功能模块
总共分为三个模块,分别是创建棋盘模块,位置设置模块和显示结果模块
1.创建棋盘模块:
此时我们使用矩阵设计一个模拟的棋盘。
其关键代码如下:
intf[11][11];
/*定义一个矩阵来模拟棋盘*/
intadjm[121][121];
/*于上述棋盘,标志矩阵*/
voidcreatadjm(void)/*创建标志矩阵函数声明*/
voidmark(int,int,int,int);
/*将标志矩阵相应位置置1*/
voidtravel(int,int);
/*巡游函数声明*/
intn,m;
/*定义矩阵大小及标志矩阵的大小*/
2.位置设置模块:
输入任意一个在8行8列棋盘中的一个点,其格式表示为:
mn(m表示行,n表示列)。
3.显示结果模块:
将起始位置设定好了,将在这个模拟棋盘中用数字显示马走过的每一步。
2.2程序功能模块图
总共有三个模块,如下图所示:
图2.2—1
第3章程序功能的具体实现
3.1主函数main()的执行流程
1.运行了主函数main()之后,马上执行了菜单,输入了行列数,在这里我们采用的是8行8列的棋盘
2.执行流程图,如下所示
是否
再是否
次
运
行
图3.1—1
3.2系统测试与调试
1.程序代码的输入和运行
新建C文件并输入代码到工作界面当中,仔细检查,运行代码,如下图所示,图3.2-1表示程序的输入和运行,图3.2-2表示运行出错:
图3.2—1
图3.2—2
2.程序代码的调试
经过老师和同学的讨论,自己上网查阅资料,修改了程序出错的地方,是由于自己的粗心,忘记写入标点符号,这才导致了错误,然后又仔细的检查了一遍程序,程序运行成功,没有错误了。
图3.2-3
3程序的显示结果
在命令窗口中输入了棋子的不同起点,运行都成功了。
如下图所示:
图3.2-4以(2,3)为起点
图3.2-5以(4,5)为起点
图3.2-6以(6,6)为起点
第4章源代码
#include<
stdio.h>
/*定义一个矩阵来模拟棋盘*/
/*标志矩阵,即对于上述棋盘,依次进行编号*/
voidcreatadjm(void);
/*创建标志矩阵函数声明*/
/***********主函数********************/
intmain()
{
inti,j,k,l;
printf("
Pleaseinputsizeofthechessboard:
"
);
/*输入矩阵的大小值*/
scanf("
%d"
&
n);
m=n*n;
creatadjm();
/*创建标志矩阵*/
puts("
Thesignmatrixis:
"
for(i=1;
i<
=m;
i++)/*打印输出标志矩阵*/
{
for(j=1;
j<
j++)
printf("
%2d"
adjm[i][j]);
\n"
}
Pleaseinputtheknight'
sposition(i,j):
/*输入骑士初始位置*/
%d%d"
i,&
j);
l=(i-1)*n+j;
/*骑士当前位置对应的标志矩阵的横坐标*/
while((i>
0)||(j>
0))/*对骑士位置的判断*/
=n;
i++)/*棋盘矩阵初始化*/
j++)
f[i][j]=0;
k=0;
/*所跳步数计数*/
travel(l,k);
/*从i,j出发开始巡游*/
Thetravelstepsare:
i++)/*巡游完成后输出巡游过程*/
{
%4d"
f[i][j]);
}
/*为再次巡游输入起始位置*/
\nPressanykeytoquit..."
getchar();
return0;
}
/***********创建标志矩阵子函数****************/
voidcreatadjm()
inti,j;
i++)/*巡游矩阵初始化*/
i++)/*标志矩阵初始化*/
adjm[i][j]=0;
i++)
if(f[i][j]==0)/*对所有符合条件的标志矩阵种元素置1*/
{
f[i][j]=1;
if((i+2<
=n)&
&
(j+1<
=n))mark(i,j,i+2,j+1);
(j-1>
=1))mark(i,j,i+2,j-1);
if((i-2>
=1)&
=n))mark(i,j,i-2,j+1);
=1))mark(i,j,i-2,j-1);
if((j+2<
(i+1<
=n))mark(i,j,i+1,j+2);
(i-1>
=1))mark(i,j,i-1,j+2);
if((j-2>
=n))mark(i,j,i+1,j-2);
=1))mark(i,j,i-1,j-2);
}
return;
/*****************巡游子函数****************/
voidtravel(intp,intr)
inti,j,q;
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<
q++)/*从所有可能的情况出发,开始进行试探式巡游*/
i=((q-1)/n)+1;
j=((q-1)%n)+1;
if((adjm[p][q]==1)&
(f[i][j]==0))
travel(q,r);
/*递归调用自身*/
/***********赋值子函数**********************/
voidmark(inti1,intj1,inti2,intj2)
adjm[(i1-1)*n+j1][(i2-1)*n+j2]=1;
adjm[(i2-1)*n+j2][(i1-1)*n+j1]=1;
第5章课程设计心得
通过两个星期对骑士游历这个程序的分析,我对C语言这门课程有了进一步的巩固,对我们现在学的《数据结构(C语言版)》的知识有了一个很好的回顾和掌握,我的在这个过程中我也知道自己能力的不足,在面对问题的时候更应该要请教老师和同学,自己也可以动手查阅资料。
我们不单是要提高自己的理论能力,还要多去实践,这样我们就能够更好的提高自己。
第6章参考文献
[1]谢希仁.计算机网络(第五版)[M].北京:
电子工业出版社,2008年2月
[2]胡小强计算机网络[M]北京:
北京邮电大学出版社2005年1月
[3]严蔚敏李冬梅吴伟民数据结构(C语言版)[M]人民邮电出版社,2011年2月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 骑士 游历 巡游 语言 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)