数据结构课程设计(迷宫问题)

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

路漫漫其修远兮,吾将上下而求索- 百度文库

课程设计报告

课程名称数据结构课程设计

课题名称迷宫问题

专业计算机科学与技术

班级计科4班

学号2013026674

姓名李梦宇

指导教师

2012年6月9日

一、设计内容与设计要求

1.设计内容:

1)问题描述

以一个M*N的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出米有通路的结论。

2)基本要求

a.实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一个坐标的方向。

b.编写递归形式的算法,求得迷宫中所有可能的通路。

3)测试数据

迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。

0 0 1 0 0 0 1 0

0 0 1 0 0 0 1 0

0 0 0 0 1 1 0 1

0 1 1 1 0 0 1 0

0 0 0 1 0 0 0 0

0 1 0 0 0 1 0 1

0 1 1 1 1 0 0 1

1 1 0 0 0 1 0 1

1 1 0 0 0 0 0 0

4

计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则,沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则设定的迷宫没有通路。

可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

2.设计要求:

课程设计报告规范

1)需求分析

a.程序的功能。

b.输入输出的要求。

2)概要设计

a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。

b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,

它们之间有什么关系等。

3)详细设计

a.采用C语言定义相关的数据类型。

b.写出各模块的类C码算法。

c.画出各函数的调用关系图、主要函数的流程图。

4)调试分析以及设计体会

a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误

的输入及输出结果。

b.程序调试中遇到的问题以及解决问题的方法。

c.课程设计过程经验教训、心得体会。

5)使用说明

用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。

6)书写格式

见附带说明。

7)附录

a.参考书目

b.源程序清单(带注释)

目录

一、任务书 (2)

二、基本算法 (7)

三、需求分析 (7)

a.程序的功能 (7)

b.输入输出的要求 (7)

c.程序算法分析 (8)

四、概要设计 (8)

i.设计中非递归程序的模块结构图 (8)

ii.程序的数据结构和数据库结构分析 (9)

iii.试探方向的设计 (10)

iv.达某点,以避免发生死循环 (11)

五、详细设计 (11)

a.伪码设计 (11)

b.mgpath()流程图 (12)

六、调试分析 (13)

七、总结 (14)

八丶附录(源代码清单) (17)

一、基本算法

走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、东南、南、西南、西、西北、北、东北8个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果8个方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。

每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。

用一个字符类型的二维数组表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。迷宫的入口点在位置(1,1)处,出口点在位置(m,m )处。设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。

二维数组的第0行、第m+1行、第0列、第m+1列元素全置成“1”, 表示迷宫的边界;第1行第1列元素和第m 行第m 列元素置成“0”, 表示迷宫的入口和出口;其余元素值用随机函数产生。

假设当前所在位置是(x,y )。沿某个方向前进一步,它可能到达的位置最多有8个。 如果用二维数组move 记录8个方向上行下标增量和列下标增量,则沿第i 个方向前进一步,可能到达的新位置坐标可利用move 数组确定:

x=x+move[i][0] y=y+move[i][1]

从迷宫的入口位置开始,沿图示方向顺序依次进行搜索。 在搜索过程中,每前进一步,在所到位置处做标记“”(表示这个位置在通路上)

每次后退的时候,先将当前所在位置处的通路标记“”改 成死路标记“×”

不要重复进入),然后将该位置的坐标从栈顶弹出。 搜索到出口位置时,数组中那些值为“”的元素形成一条

通路。

二、需求分析

a.程序的功能。

(i) 实现一个以链表作存储结构的栈类型,以非递归算法求取所有通路和最短路径

(ii)以一个递归算法,对任意输入的迷宫矩阵(1代表不通,0代表通路)求出所有通路

b.输入输出的要求。

(i) 求得的通路以三元组(i ,j ,d )的形式输出,其中:(i ,j )指示迷宫中的一个坐标,d 表示走到下一个坐标的方向。

(ii )输出迷宫示意图 c 、程序算法分析

1.迷宫的建立:

6 7 8 5 1 4 3 2

x

y

o

相关文档
最新文档