c语言版数据库骑士游历

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

华东交通大学理工学院课程设计报告书

所属课程名称数据结构

题目骑士游历

分院电信分院

专业班级电子商务2班

学号

学生姓名

指导教师吴军良

2012 年6月15 日

目录

目录 (2)

第1章课程设计内容及要求 (3)

1.1课程设计的内容 (3)

1.2课程设计要求 (3)

第2章程序设方法与分析 (4)

2.1程序设计方法 (4)

2.2程序详细分析 (4)

2.21创建棋盘 (4)

2.22分析骑士行走方法的实现 (4)

2.3程序实现结构图 (6)

第3章源程序代码 (7)

第4章程序的测试与运行 (10)

4.1编译程序 (10)

4.2链接结果如图 (12)

4.3运行程序结果 (13)

第5章课程设计心得 (17)

第6章参考文献(资料) (18)

第1章课程设计内容及要求

1.1课程设计的内容

在WINDOWS XP系统中,运行Visual C++ 6.0,在Visual C++ 6.0环境下,根据所学教材C语言版数据结构知识,运用C语言编写一个可以实现骑士游历的游戏程序。

1.2课程设计要求

(1)运行环境要求:

window xp 系统 Visual C++ 6.0环境

(2)骑士游历棋盘要求:

设计一个8行*8列共64格的棋盘。

(3)棋子走法要求:

放一个“马”,按“马走日字”的规则,马要走到棋盘上每一个格子,且每个格子只走一次。

(4)课程设计目的要求:

骑士游历问题是一个古老而著名的问题,它最初是由大数学家Euler 提出的。我们通过在window xp系统中,Visual C++ 6.0环境下,根据数据结构所学知识运用C语言编写一个8行*8列64格,满足“马走日字”的规则的骑士游历游戏来巩固数据结构知识,对理论知识加以实践,加深对知识的理解与运用。

第2章程序设方法与分析

2.1程序设计方法

2.11 用回溯法深度优先搜索,若寻找到满足要求的解,则输出;否则推回上一层往下一个方向搜索。

2.12 对于当前所在位置(x,y),依次枚举8个方向搜索,直到找到一组可行解为止。使用剪枝有2处:

(1)使用Warnsdorff's rule,枚举当前解得时候优先选择下一步可行步数最少的方向。

(2)若第一点中的方向存在不止一个,则优先选择离中心位置较远的方向;每次都从中心点开始出发,求出一条合法路径后再平移映射回待求路径。

2.2程序详细分析

2.21创建棋盘

在Visual C++ 6.0环境下运用c语言的for循环语句创写一个8行8列的棋盘。

#include

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

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

for(j = 0; j < 8; j++)

2.22分析骑士行走方法的实现

(1)设计骑士骑士可走的八个方向

int ktmove1[8] = {-2, -1, 1, 2, 2, 1, -1, -2};

int ktmove2[8] = {1, 2, 2, 1, -1, -2, -2, -1};

(2)测试骑士下一步的行走路线

int nexti[8] = {0};

int nextj[8] = {0};

(3)试探八个方向

for(k = 0; k < 8; k++)

tmpi = i + ktmove1[k];

tmpj = j + ktmove2[k];

(4)如果骑士处于边界了,则不可以行走

if(tmpi < 0 || tmpj < 0 || tmpi > 7 || tmpj > 7)

continue;

(5)如果这个方向骑士可以行走,则记录下来,在可走的方向加一个if(board[tmpi][tmpj] == 0)

nexti[l] = tmpi;

nextj[l] = tmpj;

l++;

count = l;

(6)如果可走的方向为0个,返回

if(count == 0)

return 0;

else if(count == 1)

骑士能够走最少的路线的方向

i = nexti[min];

j = nextj[min];

board[i][j] = m;

2.3程序实现结构图

图2-3

程序结构图

第3章源程序代码

#include

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

int main(void)

{

int beginx, beginy;

int i, j;

printf("output:");

scanf("%d,%d", &beginx, &beginy);

if(travel(beginx, beginy))

{

printf("win!\n");

}

else

{

printf("game over!\n");

}

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

{

for(j = 0; j < 8; j++)

{

printf("%2d ", board[i][j]);

}

putchar('\n');

}

return 0;

}

int travel(int x, int y) {

int ktmove1[8] = {-2, -1, 1, 2, 2, 1, -1, -2}; int ktmove2[8] = {1, 2, 2, 1, -1, -2, -2, -1}; int nexti[8] = {0};

int nextj[8] = {0};

int exists[8] = {0};

int i, j, k, m, l;

int tmpi, tmpj;

相关文档
最新文档