数据结构课程设计报告

发布 2022-10-05 19:24:28 阅读 8861

1、迷宫求解。

任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;

要求:在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;

一,需求分析:

本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。

首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,当迷宫有完整路径可以通过时,以0和1所组成的迷宫形式输出,标记所走过的路径结束程序;当迷宫无路径时,提示输入错误结束程序。

首先用二维指针存储迷宫数据,迷宫数据由用户输入。

一个以链表作存储结构的栈类型,然后编写一个求解迷宫的递归或非递归程序。求得的通路以三元组(i,j,d)形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东、南、西、北四个方向所用代表数字,自行定义)。

1.从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。迷宫的入口点的下标为(1,1),出口点的下标为(m,n)。

为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫的任一位置,均可约定有东、南、西、北四个方向可通。经过的位置把0变为-1,带输出迷宫路径后在恢复迷宫院士为止。

2. 本程序有三个模块:

主程序模块。

三个类模块即其对象:实现栈链表抽象数据类型;

迷宫二维指针单元模块:存储迷宫,寻路径,输出迷宫,恢复迷宫。

二、 概要设计:

1.抽象数据类型定义:

adt find

数据关系:r1=

基本操作:find (&s)

初始条件:已初始化栈s,且栈为空。

操作结果:从栈s中找出相对应的数据关系,并输出结果。

adt find

2. 主程序的流程以及各程序模块之间的调用关系:

1).定义变量i、j、w、z为整形变量。

2).输入迷宫二维数组maze(0:m,0:n)

3).调用子程序find ()

4).结束程序。

三,流程图。

四、相应的源程序如下:

#include<>

#include<>

typedef enum status;

typedef struct

int row, line

postype

typedef struct

int di, ord

postype seat;

}selemtype

typedef struct

selemtype * base;

selemtype * top;

int stacksize;

sqstack;

status initstack(sqstack &s

status push(sqstack &s,selemtype &a

status pop(sqstack &s,selemtype &a

status stackempty(sqstack s

status mazepath(int maze[12][12],sqstack &s, postype start, postype end);

void initmaze(int maze[12][12],int size

void printmaze(int maze[12][12],int size

status pass(int maze[12][12],postype curpos

void markfoot(int maze[12][12], postype curpos);

postype nextpos(postype curpos, int dir

void printpath(int maze[12][12],sqstack s,int size);

void main (void)

sqstack s;

int size,maze[12][12];

for(int n=0;n<10;n++)

printf("创建一个正方形迷宫,请输入迷宫尺寸(注意不要大于50):");

scanf("%d",&size);if(size<1 ||size>10)

initmaze(maze,size

printmaze(maze,size

postype start,end

printf("输入入口行坐标和列坐标:")scanf("%d",&d",&

printf("输入出口行坐标和列坐标:")scanf("%d",&d",&

if(mazepath(maze,s,start,end))

printpath(maze,s,size);

else printf("找不到通路!");

status mazepath(int maze[12][12],sqstack &s, postype start, postype end)

postype curpos;

int curstep;

selemtype e;

initstack(s);

curpos = start

curstep = 1

do else

if (<4)

while (!stackempty(s));

return error;

void initmaze(int maze[12][12],int size)

char select;

printf("选择创建方式 a:自动生成 b:手动创建。

label:scanf("%c",&select);

if(select=='a'||select=='a')

for(i=0;i }

else if(select=='b'||select=='b')

for(i=0;i

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...