第一范文网 - 专业文章范例文档资料分享平台

数据结构课程设计迷宫问题分解

来源:用户分享 时间:2025/10/21 6:09:32 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

(8)出队 dequeue()

(9)判断队列是否为空 is_empty() (10)访问节点 visit() (11)搜索迷宫路径 mgpath()

2.3系统详细设计

实现概要设计中定义的所有数据类型及操作的伪代码算法 1.节点类型和指针类型

迷宫矩阵类型:int maze[M+2][N+2];为方便操作使其为全局变量 迷宫中节点类型及队列类型:

struct point{int row,col,predecessor}que[512] 2.迷宫的操作 (1)手动生成迷宫

void shoudong_maze(int m,int n) {定义i,j为循环变量 for(i<=m) for(j<=n)

输入maze[i][j]的值 } (2)自动生成迷宫

void zidong_maze(int m,int n) {定义i,j为循环变量 for(i<=m) for(j<=n)

maze[i][j]=rand()%2 //由于rand()产生的随机数是从0到 RAND_MAX,RAND_MAX是定义在stdlib.h中的,其值至少为32767),要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;

}

(3)打印迷宫图形

第 6 页 共 31 页

void print_maze(int m,int n)

{用i,j循环变量,将maze[i][j]输出 □、■} (4)打印迷宫路径

void result_maze(int m,int n)

{用i,j循环变量,将maze[i][j]输出 □、■、☆} (5)搜索迷宫路径 ①迷宫中队列入队操作

void enqueue(struct point p) {将p放入队尾,tail++} ②迷宫中队列出队操作

struct point dequeue(struct point p) {head++,返回que[head-1]} ③判断队列是否为空

int is_empty()

{返回head==tail的值,当队列为空时,返回0} ④访问迷宫矩阵中节点

void visit(int row,int col,int maze[41][41]) {建立新的队列节点visit_point,将其值分别赋为

row,col,head-1,maze[row][col]=2,表示该节点以被访问过;调用enqueue(visit_point),将该节点入队} ⑤路径求解

void mgpath(int maze[41][41],int m,int n)

{先定义入口节点为struct point p={0,0,-1},从maze[0][0]开始访问。如果入口处即为障碍,则此迷宫无解,返回0 ,程序结束。否则访问入口节点,将入口节点标记为访问过maze[p.row][p.col]=2,调用函数enqueue(p)将该节点入队。

判断队列是否为空,当队列不为空时,则运行以下操作: { 调用dequeue()函数,将队头元素返回给p,

如果p.row==m-1且p.col==n-1,即到达出口节点,即找到了路径,结束;

第 7 页 共 31 页

如果p.col+1

如果p.row+1

如果p.col-1>0且maze[p.row][p.col-1]==0,说明未到迷宫左边界,且其左方有通路,则visit(p.row,p.col-1,maze),将左方节点入队标记已访问;

如果p.row-1>0且maze[p.row-1][p.col]==0,说明未到迷宫上边界,且其上方有通路,则visit(p.row,p.col+1,maze),将上方节点入队标记已访问。

}

访问到出口(找到路径)即p.row==m-1且p.col==n-1,则逆序将路径标记为3即:

maze[p.row][p.col]==3; while(p.predecessor!=-1) {p=queue[p.predecessor]; maze[p.row][p.col]==3;} 最后将路径图形打印出来。 搜索算法流程如图2.3所示:

第 8 页 共 31 页

图2.3 迷宫路径搜索流程图

3.菜单选择

while(cycle!=(-1)) ☆ 手动生成迷宫 请按:1 ☆ 自动生成迷宫 请按:2 ☆ 进入迷宫游戏 请按:3 ☆ 退出迷宫游戏 请按:4 ☆ ~~特别鸣谢~~ 请按:0 scanf(\ switch(i)

{ case 1:请输入行列数(如果超出预设范围则提示重新输入)

第 9 页 共 31 页

搜索更多关于: 数据结构课程设计迷宫问题分解 的文档
数据结构课程设计迷宫问题分解.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6s20r3tyej6tzp834d3b207lq1bbd101ehr_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top