c语言数据结构推箱子实验报告,推箱子的最短路径-数据结构与C语言综合训练报告.doc...

推箱子的最短路径-数据结构与C语言综合训练报告

信息工程学院

数据结构与C语言综合训练报告

(2012~2013学年第 二学期)

报告题目:____推箱子的最短路径_ __

姓 名:_ __ ____

专 业: 软件工程

年级班级:___2012级2班___

指导教师:

完成日期: 2013年7月21号

一、综合训练目的和要求

本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。本课综合训练的目的和任务:

1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握

2. 掌握C语言编程和程序调试的基本技能

3. 利用C语言进行基本的软件设计

4. 掌握书写程序设计说明文档的能力

5. 提高运用C语言、数据结构解决实际问题的能力

二、综合训练任务内容

1.题目要求:

推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上那么箱子就不能再被移动了,如果箱子被推到一面墙上,那么箱子只能沿着墙移动.现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.

四、详细设计说明

1、推箱子游戏具有的功能

(1)能够显示主菜单和界面

游戏需要提供主菜单进行选择,同时能够把地图文件中的信息转换成为图像显示到游戏界面上。

(2)能够实现键盘操作功能

能够接收到空格键信息,按照软件内部实现的箱子移动到相应的位置。

能够进行关卡选择功能

进入开始游戏的界面时,可以进行游戏的关卡的选择,然后利用空格键进行箱子的移动。

提供游戏说明功能

进入游戏说明界面时,可以了解游戏的一些规则,及如何进行游戏。

程序结构设计

运用C++语言,以及VS2010开发环境

(1)、typedef struct Pnode{

int row;

int col;

int weight;

struct Pnode* back_man;

}Pnode, * Position;

某一点的坐标表示,当用来实现箱子的最短路径的搜索时,back_man 用来存储箱子移动一个位置后,人所在的位置。

(2)、typedef struct Mnode{

int mrow;

int mcol;

char maze[MAX_ROW][MAX_COL];

}MNode, *MazeType;

用来存储地图的信息

、算法的实现

主要有两个类,第一个类是class ShortestPath ;

第二个类是class ManBoxStep: public ShortestPath ;

A、第一个类class ShortestPath 是用来实现地图中任意两点之间的最短路径,成员函数及其功能如下:

Position NextPosition(Position &curpos, int di);

用来计算当前点在四个方向下的移动一格得到的下一点的坐标位置,并返回;

bool CanArrive( vector< list > &vec);

数据成员有start,end,此函数是判断在地图中能否从 start 到 end ,并利用广度优先搜索搜索从start 到end 的路径,并把所有搜索过的位置全部记录在顺序容器 vec 中,vec[i] 表示存储一系列与start 位置相距i 个格子的被搜索的点的位置;

void RecordWay( vector< list > &vec, vector &way);

此函数根据 vec 中所存储的数据,利用回溯法进行往回搜索,找到从 start 到 end 的最短路径, 并把路径存到容器 way 中;

B、第二个类class ManBoxStep 是利用第一个类中的函数实现人和箱子一起从起点到箱子应到的位置的最短路径,其中的成员函数及其功能如下:

Position NextState(Position box, int di);

此函数的功能是纪录当人能够移动箱子的情况下,纪录移动后箱子和人的位置;

MazeType UpdateMaze(MazeType mymaze, Position curpos, Position newpos);

此函数的功能是每当在搜索下一步时,及时的更新所在的地图(即改变人和箱子的位置),并每次都将地图纪录下来;

bool BFSCanArrive( vec

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值