- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
题目:编制一个求解迷宫通路的程序。
班级:11软件一班 姓名:宁雪锋 学号:1125115017 完成日期:2012/11/5
一、 需求分析
(1 )以二维数据 Maze[m+2][n+2] 表示迷宫,其中:Maze[0][j]和Maze[m+1][j]
(0=j=n+1 )及Maze[i][0]和Maze[i][n+1](0=i=m+1) 为添加一圈障碍。数组中以元素值
为0 表示通路,1 表示障碍,限定迷宫的大小 m,n=10。
(2 )用户以文件的形式读入迷宫的数据:文件中第一行的数据为迷宫的行数 m 和列数
n ;第二行是开始点与到达点的坐标,从第 3行至第 m+2 行(每行 n 个数)为迷宫值,同一行中的两个数字之间用空白字符相隔。
(3)若设定的迷宫存在通路,则以坐标以及箭头的方式输出其通路,例如1,1 - 2,2(4 )本程序只求出一条成功的通路。然而,只需要对迷宫求解的函数作小量修改,便
可求得全部路径。
(5 )测试数据见文档data,当入口位置为(1 ,1 ),出口位置为(4 ,4 )时,输出数据应为:
(6 )程序执行的命令为:
1 )文件读入数据,创建迷宫;2 )求解迷宫;3 )输出迷宫的解
二、 概要设计
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层
次(调用)关系
1. 设定栈的抽象数据类型定义:
ADT Stack{
数据对象:D={ai|ai ∈ CharSet,i=1,2,…,n,n=0}
数据关系:R1={ai-1,ai|ai-1,ai ∈ D,i=2,…,n}
基本操作:
栈的构造函数(赋予栈的正确性):
Stack::Stack(){top=NULL;}
栈的析构函数(及时回收未使用的空间):
~Stack(){}
压栈操作:
Push(T e);
弹栈操作(输出top的元素):
Pop();
获得栈顶元素:
GetPop();
清空栈:
Clear();
判断是否栈空(输出布尔型):
empty()
2、迷宫的基本操作:
从文本中读入数据建立迷宫
GetMaze(int m,int n);
寻找迷宫maze中从(0,0)到(m,n)的路径
Mazepath(int **maze,int m,int n);
打印出通路的路线
PrintPath(Stack p, int m, int n, int **maze);
恢复迷宫矩阵的原始状态
Restore(int **maze,int m,int n);
3. 本程序包含三个模块
1 ) 主程序模块:
void main( )
{
初始化;
调用函数建立迷宫
再次调用函数得到路径(如果存在)
}
2 ) 栈模块——实现栈抽象数据类型
3 ) 迷宫模块——实现迷宫抽象数据类型
各模块之间的调用关系如下:
主程序模块
↓
迷宫模块
↓
栈模块
三、 详细设计
1、以结构的形式来表示迷宫矩阵的每个点以及后续的整个通路的点
struct T
{
int x;
int y;
int dir; //0:到达,1:东,2:南,3:西,4:北
};
2 . 迷宫类型
int **maze;
//定义二维指针存取迷宫
int** GetMaze(int m,int n){
从文档data.txt中读入迷宫的长和宽,再根据长和宽读入迷宫
从而建立迷宫
再利用一个二重循环输出原始的迷宫
}
bool Mazepath(int **maze,int m,int n){
根据定义的四个方向:
int move[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; //定义当前位置移动的4个方向
不断尝试,然后是用栈形式不断的对通路上的路不断入栈抛栈操作最终得到其一条通路
通过函数PrintPath(Stack p, int m, int n, int **maze);打印出整条通路
在该函数中
switch(data.dir) //输出相应的方向
{
case 1:cout\n ↓\n;break;
case 2:cout→;break;
case 3:cout\n ↑\n;break;
case 4:cout←;break;
case 0:cout^-^\n;break;
}
通过这种箭头的方式比较简易明显地表现通路的走向
void Restore(int **maze,int m,int n) //恢复迷宫
{
对于寻路的过程的修改,通过此函数恢复初始状态
}
}
四、 调试分析
1、脑袋中想到的第一想法是以类的形式,类可以及时回收空间,
原创力文档


文档评论(0)