迷宫问题实验报告(c++编写-附源代码)

迷宫问题实验报告(c++编写-附源代码)
迷宫问题实验报告(c++编写-附源代码)

迷宫问题实验报告

级班年月日姓名学号_

1.实验题目

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

2.需求分析

本程序使用VC编写,实现设定迷宫或自动生成迷宫长方阵表的功能,并且求出一条从指定入口到指定出口的通路,或得出没有通路的结论。

①输入的形式和输入值的范围:

A.输入指定的数字,以此选择迷宫的创建方式,分为手动创建迷宫和自动创建迷宫

B. 输入迷宫阵表的行数和列数,行数和列数不超过40行

C. 手动创建迷宫时,需要输入迷宫结点的通畅和障碍情况,0和1分别表示迷宫中的通路和障碍。

②输出的形式:输出没有通路的结论,或者输出一个长方阵表,其中路径的每个结点都输出→、↓、←、↑之一,表示从当前结点到下一个结点的方向。

③程序所能达到的功能:实现设定迷宫或自动生成迷宫长方阵表的功能,并且求出一条从指定入口到指定出口的通路(迷宫的入口指定为坐标为(1,1)的结点,迷宫的出口指定为坐标为(迷宫最大行,迷宫最大列)的结点),或得出没有通路的结论。

④测试数据:

输入数据:

A.出现选择生成迷宫方式的菜单时,输入1(即手动输入数据,生成迷宫);

B.输入迷宫的行数和列数,行数输入3,列数输入3;

C.输入每个迷宫结点的信息:

0 0 1

1 0 0

1 0 0

输出结果:

→↓ 1

1 →↓

1 0 0

3.概要设计

为了实现上述程序功能,需要定义迷宫的抽象数据类型:

typedef struct Maze creat_manual()

初始条件:无

操作结果:手动创建一个迷宫。

B. Maze creat_automatic()

初始条件:无

操作结果:自动创建一个迷宫。

C. int Array found(int

x,int y,Point

*head)

初始

条件:存在一个

存放结点的链栈

操作

结果:查找栈中

是否有head指

针内所含的坐

标;若含,则返

回1,否则返回

0。

D. Point

*

find_road(Maze

a)

初始条件:存在一个迷宫

操作结果:返回一条通路或者NULL

E. void display(Point *po,Maze a)

初始条件:存在一个迷宫

操作结果:输出结果。

程序包含6个函数:

○1主函数main()

○2手动创建一个迷宫 Maze creat_manual();

○3自动创建一个迷宫 Maze creat_automatic();

○4查找栈中是否有head指针内所含的坐标 int found(int x,int y,Point *head);

○5迷宫寻路函数Point * find_road(Maze a);

○6显示迷宫信息函数 void display(Point *po,Maze a);

各函数间关系如下:

4.详细设计

1)定义迷宫结构体

typedef struct

{

int maze_array[maxsize][maxsize];

xe,运行环境为DOS。程序执行后显示

请选择手动或自动生成迷宫

1.手动生成迷宫

2.自动生成迷宫

输入数字选择执行不同的功能。

输入1,使用手动生成迷宫功能;

输入2,使用自动生成迷宫功能;

输入其他数字,则提示输入错误,需要重新输入数字选择功能,直至输入的数字为1或2为止。

输入其他数字后,输出的画面如下:

您输入的数值有误,请重新输入

请选择手动或自动生成迷宫

1.手动生成迷宫

2.自动生成迷宫

输入1后,接着输入迷宫的行数和列数,最后出现如下画面

此时请依次输入每个结点的值,其中入口和出口必须输入0:

接着程序会输出迷宫通路或者是没有通路的信息

使用自动创建迷宫功能时,只需输入行数和列数,接着程序会输出迷宫通路或者是没有通路的信息

7.测试结果

1)5X5迷宫,没路的情况,输入和输出如下所示:

2)5X5迷宫,有通路情况,输入和输出如下所示:

3)4X3迷宫,没路情况,输入和输出如下所示:

4)4X3迷宫,有路情况,输入和输出如下所示:

源代码如下:

# include

using namespace std;

#include<>

#include<>

# define maxsize 20

typedef struct动生成迷宫"<

cout<<"2.自动生成迷宫"<

cin>>selection;

while(selection!=1&&selection!=2)

{

cout<<"您输入的数值有误,请重新输入"<

cout<<"请选择手动或自动生成迷宫"<

cout<<"1.手动生成迷宫"<

cout<<"2.自动生成迷宫"<

cin>>selection;

}

if(selection==1)

a=creat_manual();

else

a=creat_automatic();

po=find_road(a);

display(po,a);

getchar();

getchar();

}

相关主题
相关文档
最新文档