云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构课程设计迷宫问题分解

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

  • 62 次阅读
  • 3 次下载
  • 2025/12/9 10:04:32

(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 页

搜索更多关于: 数据结构课程设计迷宫问题分解 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

(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]

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com