数据结构 迷宫问题求解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 迷宫问题求解

学号 实验日期 2017.6.20 教师签字 成绩 实验报告 【实验名称】 迷宫问题的求解 【实验目的】 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 (3)用递归和非递归两种方式完成迷宫问题的求解。 【实验原理】 迷宫问题通常是用“穷举求解”方法解决,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前走;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。栈是一个后进先出的结构,可以用来保存从入口到当前位置的路径。 【实验内容】 1 需求分析 (1)首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如,对于教材第50页图3.4所示的迷宫,输出一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),… (2)编写递归形式的算法,求得迷宫中所有可能的通路。 (3)以方阵形式输出迷宫及其通路。 (4)按照题意要求独立进行设计,设计结束后按要求写出设计报告。 2.输入输出的要求: (i) 求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一个坐标的方向。 (ii)输出迷宫示意图 3.程序所能达到的功能: (i) 实现一个以链表作存储结构的栈类型,以非递归算法求出通路 (ii)以一个递归算法,对任意输入的迷宫矩阵求出所有通路。 2 概要设计 ②手动生成迷宫,即为二维数组maze[M][N]赋值 ③构建一个栈用于存储迷宫路径 ④建立迷宫节点用于存储迷宫中每个节点的访问情况; 非递归 本程序包含6个函数: (1)主函数 main() (2)生成迷宫 create_maze() (4)打印迷宫 print_maze() (5)搜索迷宫路径并用三元组输出路径 mgpath() (6)用图来输出路径print_tu();? 递归 本程序包含3个函数: (1)主函数main(); (2)打印迷宫printmaze(); (3)搜索迷宫路径pass(int x,int y); 3. 详细设计 1.非递归 起点和终点的结构类型 typedef struct{ int h; int l; }T; 栈节点类型 typedef struct cell{ int row; int col; int dir; }TCell; ?1.生成迷宫 void creat_maze(int a,int b) {定义i,j为循环变量 for(ia) for(jb) 输入maze[i][j]的值 } 2.打印迷宫 void print_maze(int m,int n) { 用i,j循环变量,将maze[i][j]输出 } 3.搜索迷宫路径 void mazepath(int maze[][],T s,T e) //参数传递迷宫和起点与终点 { TCell S[N1*N2]; top=0; //建立栈 S[top].row=s.h; S[top].col=s.l; S[top].dir=-1; //起点入栈 while(top=0) //判栈是否空 { i,j为当前访问点的位置 if(i,j是终点坐标) 用循环输出栈里的元素; else 将(i,j),即访问点入栈,然后向四周寻找是否有通路,若有通路,将原访问点标记(赋值-1),选一条通路作为新访问点,入栈。 若没有通路,回溯,将栈顶元素出栈作为访问点,继续寻找通路。 } 4.生成路线图 Print_tu() { i,j为循环变量 for(ia) for(jb) { if(maze[i][j]==1); print(“#”) // # 表示墙 else if(maze[i][j]==0) print(“ ”) else print(“+”) // + 表示路径 } 2.递归 void printmaze() { 用i,j循环变量,将ma

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档