迷宫问地题目课程设计报告材料

合集下载

数据结构课程设计――迷宫问题课程设计报告

数据结构课程设计――迷宫问题课程设计报告

数据结构课程设计――迷宫问题课程设计报告迷宫问题——王欣歆20080564一(需求设计:以一个m*m 的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口的通道,或得出没有通路的结论。

二(概要设计:存储结构:采用了数组以及结构体来存储数据,在探索迷宫的过程中用到的栈,属于顺序存储结构。

/*八个方向的数组表示形式*/int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1, 1}};/*用结构体表示位置*/struct position{int x,y;};position stack[m*m+1];基本算法:走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、东南、南、西南、西、西北、北、东北8个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果8个方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。

每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。

用一个字符类型的二维数组表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。

迷宫的入口点在位置(1,1)处,出口点在位置(m,m)处。

设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。

二维数组的第0行、第m+1行、第0列、第m+1列元素全置成“1”,表示迷宫的边界;第1行第1列元素和第m行第m列元素置成“0”,表示迷宫的入口和出口;其余元素值用随机函数产生。

假设当前所在位置是(x,y)。

沿某个方向前进一步,它可能到达的位置最多有8个。

如果用二维数组move记录8个方向上行下标增量和列下标增量,则沿第i个方向前进y 一步,可能到达的新位置坐标可利用move数组确定: o x=x+move[i][0]y=y+move[i][1]从迷宫的入口位置开始,沿图示方向顺序依次进行搜索。

迷宫问题-数据结构与算法课程设计报告

迷宫问题-数据结构与算法课程设计报告

合肥学院计算机科学与技术系课程设计报告2008 ~2009 学年第二学期课程数据结构与算法课程设计名称迷宫问题学生名称陈建华专业班级08计本(2)班指导教师王昆仑2010年6月一、问题分析和任务定义1.题目:迷宫的生成与路由。

生成一个N*M(N行M列)的迷宫,0和1分别表示迷宫中的通路和障碍,设计一个程序,完成迷宫的组织与存储,并实现迷宫的路由算法。

即对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论2.设计要求:(1)N和M是用户可配置的,缺省值为50和50。

(2)迷宫的入口和出口分别在左上角和右下角。

(3)求得的通路以二元组( i , j )的形式输出,其中(i, j)指示迷宫中的一个坐标。

(4) 以二维数组存储迷宫数据。

3.问题描述:迷宫是一个矩形区域如图(a)所示,它有一个入口和一个出口,其内部包含能穿越的强或障碍。

迷宫老鼠问题就是要寻找一条从入口到出口的路径。

对这样的矩形迷宫,可以用N*M的矩阵来描述,N和M分别代表迷宫的行数和列数。

这样,迷宫中的每一个位置都可以用行号和列号来指定。

(1,1)表示入口位置,(n,m)表示出口位置;从入口到出口的路径则是由一个位置构成的,每个位置上都没有障碍,且每个位置(第一个除外)都是前一个位置的东、南、西或北的邻居。

为了描述迷宫中位置(i,j)处有无障碍,规定:当位置(i,j)处有一个障碍时,其值为1,否则为0。

这样,如图(a)所示的迷宫就可以用图(b)所示的矩阵来描述。

其中,a11=0表示入口,anm=0表示出口;若aij表示从入口到出口路径上的某个位置,则应该有aij=0经分析,一个简单的求解方法是:从入口出发,沿某一方向进行探索,若能走通,则继续向前走;否则沿原路返回,换一方向再进行搜索,直到所有可能的通路都探索到为止。

即0 1 1 1 1 1 0 0 0 00 0 0 0 0 1 0 1 0 00 0 0 1 0 1 0 0 0 00 1 0 1 0 1 0 1 1 00 1 0 1 0 1 0 1 0 00 1 1 1 0 1 0 1 0 10 1 0 0 0 1 0 1 0 10 1 0 1 1 1 0 1 0 01 0 0 0 0 0 0 1 0 00 0 0 0 0 1 1 1 0 0(a) (b)4.测试用例:手动绘制迷宫正确的输入数据:0 0 0 0 1 01 1 1 0 1 00 1 0 0 0 11 0 1 1 1 1手动绘制迷宫正确的输出结果:随机绘制迷宫错误的输出结果:此迷宫没有通路!注:用一个二维数组表示迷宫,数组中的每个元素表示一个小方格,0和1分别表示迷宫中的通路和障碍。

迷宫问题课程设计

迷宫问题课程设计

迷宫问题课程设计一、课程目标知识目标:1. 学生能理解并掌握迷宫问题的基础知识,包括迷宫的构成、路径的概念。

2. 学生能够运用所学知识,分析并解决迷宫问题,如找出从入口到出口的最短路径。

3. 学生能够运用数学符号和图表来表示迷宫问题,理解问题解决的策略。

技能目标:1. 学生培养逻辑思维和问题解决能力,通过分析迷宫问题,锻炼学生的推理和决策技巧。

2. 学生通过小组合作,提高沟通协作能力,共享解决问题的过程和方法。

3. 学生能够运用信息科技工具,如计算机编程软件,解决迷宫问题,培养信息素养。

情感态度价值观目标:1. 学生培养面对问题的积极态度,勇于尝试和探索,不畏难。

2. 学生在小组活动中,学会尊重他人意见,形成团队协作精神。

3. 学生通过解决迷宫问题,体验学习的乐趣,增强自信心,认识到学习与生活的联系。

本课程针对的学生群体为具有一定逻辑思维能力和合作能力的中年级学生。

课程性质为拓展型课程,旨在通过迷宫问题激发学生的思维,提高其解决实际问题的能力。

教学要求注重理论与实践相结合,鼓励学生动手操作,培养探究和创新意识。

通过本课程的学习,学生将能将理论知识与实践相结合,形成解决复杂问题的综合能力。

二、教学内容本章节教学内容以《数学课程标准》中关于问题解决能力的培养为指导,结合教材中“逻辑与推理”单元,设计以下内容:1. 迷宫基础知识:迷宫的构成、路径的定义及分类。

- 教材章节:第三单元“逻辑与推理”,第1节“问题解决的基本方法”。

2. 迷宫问题解决策略:深度优先搜索、广度优先搜索、启发式搜索。

- 教材章节:第三单元“逻辑与推理”,第2节“搜索策略”。

3. 迷宫问题的数学模型:运用图论、线性方程等数学工具表示迷宫问题。

- 教材章节:第三单元“逻辑与推理”,第3节“数学建模”。

4. 计算机编程解决迷宫问题:运用Scratch等编程软件,实现迷宫路径的寻找。

- 教材章节:第四单元“信息技术与数学”,第1节“计算机编程简介”。

迷宫问题课程设计

迷宫问题课程设计

04
算法性能分析与优化
时间复杂度分析
深度优先搜索(DFS)算法的时间复杂度
在最坏情况下,DFS需要遍历迷宫中的所有单元格,因此时间复杂度为O(n^2),其中n为迷宫的边长 。
广度优先搜索(BFS)算法的时间复杂度
BFS同样需要遍历所有单元格,时间复杂度也为O(n^2)。但在某些情况下,BFS可能会比DFS更快找 到解,因为它按照层次进行搜索。
短路径。评价:程序实现了最短路径的求解,但在处理大型迷宫时可能
存在性能问题。
03
作品三
基于A*算法的迷宫求解程序。该程序使用A*算法,结合了启发式函数,
能够更快地找到最短路径。评价:程序采用了先进的搜索算法,求解效
率高,但在实现上较为复杂。
未来研究方向探讨
复杂迷宫问题求解
研究如何处理更大规模、更复 杂的迷宫问题,例如三维迷宫
迷宫问题课程设计
2024-01-25
目录
• 课程介绍与目标 • 迷宫问题算法设计 • 数据结构与实现 • 算法性能分析与优化 • 编程实践与案例分析 • 课程总结与展望
01
课程介绍与目标
迷宫问题背景
01
02
03
迷宫问题的起源
迷宫问题作为一种经典的 算法问题,起源于计算机 科学和人工智能领域。
迷宫问题的应用
、动态迷宫等。
多目标迷宫问题
探讨如何在迷宫问题中考虑多 个目标,例如同时寻找多个终 点或者优化多个指标。
智能化求解方法
研究如何使用机器学习、深度 学习等人工智能技术来自动学 习和优化迷宫问题的求解方法 。
实际应用拓展
探索迷宫问题在实际应用中的 拓展,例如路径规划、机器人
导航等领域的应用研究。

迷宫问题求解课程设计

迷宫问题求解课程设计

迷宫问题求解课程设计一、课程目标知识目标:1. 学生能理解迷宫问题的基本概念,掌握迷宫的图形表示和抽象表示方法。

2. 学生能掌握深度优先搜索、广度优先搜索等基本算法,并运用到迷宫问题求解中。

3. 学生能了解启发式搜索算法,如A*算法,并理解其在迷宫问题中的应用。

技能目标:1. 学生能够运用所学算法,独立设计并实现迷宫问题的求解程序。

2. 学生能够分析不同算法在解决迷宫问题时的优缺点,并进行比较和优化。

3. 学生能够通过小组合作,共同探讨迷宫问题的解决方案,提高团队协作和沟通能力。

情感态度价值观目标:1. 学生培养对算法和编程的兴趣,激发学习计算机科学的热情。

2. 学生通过解决实际问题,增强自信心和成就感,提高面对复杂问题的勇气和毅力。

3. 学生在团队协作中学会尊重他人、倾听意见,培养良好的合作精神和沟通能力。

分析课程性质、学生特点和教学要求:本课程为信息技术或计算机科学相关课程,旨在培养学生运用算法解决实际问题的能力。

学生处于中学高年级,具备一定的编程基础和逻辑思维能力。

教学要求注重理论与实践相结合,鼓励学生动手实践和合作探究,以实现以下具体学习成果:1. 学生能够自主设计并实现迷宫问题的求解程序。

2. 学生能够分析比较不同算法的性能,并进行优化。

3. 学生能够在团队中发挥各自优势,共同解决问题,提高沟通和协作能力。

二、教学内容1. 迷宫问题基本概念:迷宫的图形表示与抽象表示,介绍迷宫问题的定义和特点。

相关教材章节:第二章 算法基础,第三节 图的表示与应用。

2. 深度优先搜索算法:算法原理、实现步骤,以及在迷宫问题中的应用。

相关教材章节:第三章 搜索算法,第一节 深度优先搜索。

3. 广度优先搜索算法:算法原理、实现步骤,以及在迷宫问题中的应用。

相关教材章节:第三章 搜索算法,第二节 广度优先搜索。

4. 启发式搜索算法:A*算法原理、实现步骤,以及在迷宫问题中的应用。

相关教材章节:第三章 搜索算法,第四节 启发式搜索。

迷宫求解课程设计(含引言、需求分析、伪代码、数据结构、代码分析、附录)

迷宫求解课程设计(含引言、需求分析、伪代码、数据结构、代码分析、附录)

引言数据结构是一门理论性很强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。

该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。

通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在学校和离校后的工作和学习,也有重要意义。

数据结构是电子信息科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上起下的作用,学好了数据结构对于提高理论认知水平和实践能力有着极其重要的作用。

学习数据结构的最终目的是为了获得求解问题问能力。

对于现实世界中的问题,应该能从中抽象出一个适当的数学模型, 该数学模型在计算机内部的数据结构来表示,然后设计一个解此数学模型的算法,在进行编程调试,最后活的问题的解答。

基于此原因,现在我们开设数据结构课程设计。

针对数据结构课程的特点,着眼于培养我们的实践能力.实习课程是为了加强编程能力的培养,鼓励学生使用新兴的编程语言.相信通过数据结构课程实践,无论是理论知识,还是动手能力,同学们都会有不同程度的提高。

一、需求分析本课程设计是解决迷宫求解的问题,从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。

为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。

因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”,则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向退回到“前一通道块然后朝着除“来向之外的其他方向继续探索;若该通道块的四周 4 个方块均“不可通”,则应从“当前路径”上删除该通道块.所谓“下一位置指的是当前位置四周 4 个方向(上、下、左、右)上相邻的方块。

课程设计求解迷宫问题

课程设计求解迷宫问题

课程设计求解迷宫问题一、教学目标本课程旨在通过求解迷宫问题,使学生掌握迷宫问题的基本概念、求解方法和算法。

具体目标如下:1.了解迷宫问题的定义、分类和应用场景。

2.掌握迷宫问题的基本求解方法,如深度优先搜索、广度优先搜索、启发式搜索等。

3.理解迷宫问题的算法复杂度和优化方法。

4.能够运用深度优先搜索、广度优先搜索、启发式搜索等方法解决实际迷宫问题。

5.能够分析迷宫问题的特点,选择合适的算法进行求解。

6.能够编写程序实现迷宫问题的求解算法。

情感态度价值观目标:1.培养学生的逻辑思维能力和问题解决能力。

2.激发学生对计算机科学和的兴趣。

3.培养学生的团队合作意识和交流表达能力。

二、教学内容本课程的教学内容主要包括迷宫问题的基本概念、求解方法和算法。

具体安排如下:1.迷宫问题的定义、分类和应用场景。

2.深度优先搜索算法及其实现。

3.广度优先搜索算法及其实现。

4.启发式搜索算法及其实现。

5.迷宫问题的算法复杂度和优化方法。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式。

具体方法如下:1.讲授法:通过讲解迷宫问题的基本概念、求解方法和算法,使学生掌握相关知识。

2.案例分析法:通过分析实际案例,使学生更好地理解迷宫问题的求解方法和算法。

3.实验法:让学生动手编写程序,实现迷宫问题的求解算法,提高学生的实际操作能力。

4.讨论法:学生进行分组讨论,培养学生的团队合作意识和交流表达能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《计算机科学导论》相关章节。

2.参考书:《算法导论》等相关书籍。

3.多媒体资料:相关教学PPT、视频资料等。

4.实验设备:计算机、编程环境等。

通过以上教学资源的使用,我们将帮助学生更好地掌握迷宫问题的求解方法和算法,提高他们的计算机科学素养。

五、教学评估为了全面、客观、公正地评估学生在课程中的学习成果,我们将采用多种评估方式相结合的方法。

c课程设计报告迷宫

c课程设计报告迷宫

c 课程设计报告迷宫一、教学目标本课程的教学目标是让学生掌握迷宫问题的基本概念、算法和编程技巧。

通过本课程的学习,学生应能理解迷宫问题的数学模型,掌握常用的迷宫算法,并能够运用编程语言实现迷宫的求解。

此外,学生还应培养解决问题的能力和创新思维,提高对计算机科学和编程的兴趣。

具体来说,知识目标包括:1.了解迷宫问题的背景和应用场景。

2.掌握迷宫问题的数学模型和基本概念。

3.熟悉常用的迷宫算法及其特点。

4.理解编程语言在解决迷宫问题中的应用。

技能目标包括:1.能够运用迷宫算法求解简单迷宫问题。

2.能够运用编程语言实现迷宫算法的求解。

3.能够对迷宫算法进行优化和改进。

情感态度价值观目标包括:1.培养学生对计算机科学和编程的兴趣。

2.培养学生解决问题的能力和创新思维。

3.培养学生的团队合作意识和沟通能力。

二、教学内容本课程的教学内容主要包括迷宫问题的基本概念、算法和编程技巧。

具体内容包括:1.迷宫问题的背景和应用场景。

2.迷宫问题的数学模型和基本概念。

3.常用的迷宫算法及其特点。

4.编程语言在解决迷宫问题中的应用。

教学大纲安排如下:第一课时:介绍迷宫问题的背景和应用场景,引入迷宫问题的数学模型和基本概念。

第二课时:介绍常用的迷宫算法及其特点,引导学生理解编程语言在解决迷宫问题中的应用。

第三课时:通过案例分析,让学生运用迷宫算法求解简单迷宫问题,培养学生的编程能力。

第四课时:引导学生对迷宫算法进行优化和改进,提高学生的解决问题的能力。

第五课时:进行课程总结和回顾,让学生展示自己的迷宫求解成果,进行交流和评价。

三、教学方法本课程的教学方法采用讲授法、讨论法和实验法相结合的方式。

通过讲授法,向学生传授迷宫问题的基本概念、算法和编程技巧;通过讨论法,引导学生进行思考和交流,培养学生的创新思维;通过实验法,让学生动手实践,培养学生的编程能力和解决问题的能力。

在教学过程中,教师应根据学生的实际情况,灵活运用不同的教学方法,以激发学生的学习兴趣和主动性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第一章:设计问题描述与分析 (1)1.1.课程设计内容 (1)1.2. 问题分析 (1)1.3.功能实现 (2)1.4.运行环境 (3)第二章:算法设计与流程图 (4)2.1.主函数的流程图 (4)2.2.概要设计 (5)2.4详细设计 (6)2.4.1. 节点类型和指针类型 (6)2.4.2.迷宫的操作 (6)(1)生成迷宫 (6)(2)打印迷宫矩阵与字符图形 (7)(3)迷宫求解路由求解操作 (7)(4)打印迷宫通路坐标 (8)(5)输出迷宫通路的字符图形 (8)2.4.3. 主函数 (9)第三章:调试分析 (10)第四章:使用说明 (11)第五章:测试结果 (12)附录1 (19)附录2 (19)第一章:设计问题描述与分析1.1.课程设计内容:该系统是由C 语言编写的生成一个N×M(N行M列)的迷宫,完成迷宫的组织和存储,并实现迷宫路由算法。

基本要求1、 N和M是用户可配置的,缺省值为50和50。

2、迷宫的入口和出口分别在左上角和右下角。

提示:(1)可以使用二维数组maze[M+2][N+2]表示迷宫,其中M,N为迷宫的行、列数,当元素值为0时表示该点是通路,当元素值为1时表示该点是墙。

老鼠在每一点都有4种方向可以走,可以用数组move[4]来表示每一个方向上的横纵坐标的偏移量,可用另一个二维数组mark[M+2][N+2]记录节点的访问情况。

(2)可以选用深度优先算法或广度优先算法实行,迷宫可由自动或手动生成。

测试用例应该包含有解迷宫和无解迷宫。

1.2. 问题分析本程序要求实现迷宫问题的相关操作,包括迷宫的组织和存储,并实现迷宫路由算法(即查找迷宫路径)。

程序所能达到的:具体包括迷宫的建立,迷宫的存储(迷宫由自动生成或手动生成),迷宫中路径的查找迷宫是一个矩形区域,迷宫存在一个入口和一个出口,其内部包含了不能穿越的墙或者障碍。

迷宫的建立即是建立这样一个迷宫矩阵,用于存储迷宫信息,包括可穿越的路和不可穿越的墙或者障碍,分别用0表示通路,1表示障碍。

对于迷宫矩阵,用m×n的矩阵来描述,m和n分别代表迷宫的行数和列数。

这样,则迷宫中的每个位置都可以用其行号和列号来指定。

从入口到出口的路径是由一组位置构成的。

每个位置上都没有障碍,且每个位置(第一个除外)都是前一个位置的上、下、左、右的邻居。

为了描述迷宫中位置(i ,j)处有无障碍,规定,当位置(i ,j)处有一个障碍时,其值为1,否则为0.这样迷宫就可以用0、1矩阵来描述,在构造矩阵时,为了操作方便会将矩阵四周置为1(不通)。

对于查找迷宫路由问题首先,考察,迷宫的入口位置,如果该位置就是迷宫出口,则已经找到了一条路径,搜索工作结束。

否则,考察其上、下、左、右位置上的邻居是否是障碍,若不是就移动到这个相邻位置上,然后对于这个位置开始搜索通往出口的路径。

如果不成功,就选择另一个相邻的位置,并从它开始搜索路径。

为防止搜索出现重复,则将已搜索过的位置标记为1。

同时为保留过搜索的痕迹,在考察相邻位置之前,将当前位置保存在一个堆栈中,如果所有相邻的非障碍位置均被搜索过,且未能找到通往出口的路径,则表明不存在从入口到出口的路径。

且对于此,实现的是深度优先遍历算法,如果查找到路径,则为从入口到出口的路径。

下面实现如何利用堆栈实行深度优先遍历算法进行迷宫最短路径的查找。

以矩阵 1 1 1 1 1 1 11 0 0 1 0 1 11 1 0 0 1 0 11 1 0 0 0 1 11 0 0 1 0 0 11 1 1 1 1 1 1首先,将位置(1,1)放入堆栈中,从它开始搜索,标记。

由于其只有一个非障碍位置,所以接下来移动到(1,2),防止稍后的搜索再经过这个位置。

从(1,2)移动到(2,2),放入堆栈中,(2,2)存在(2,3)、(3,2)两个可移动位置。

标记已被搜索过,对于每一个非障碍位置,它的相邻非障碍节点均入队列,实现了深度优先遍历算法。

所以如果存在路径,则从出口处节点的位置,逆序则可以找到其从出口到入口的通路。

实现了查找路径。

1.3.功能实现:1、数据输入形式和输入值的范围:生成迷宫时可选择手动或者自动生成;手动输入迷宫矩阵时以0 表示无障碍为通路,1 表示该点有障碍为墙。

所有输入中,元素的值均为整数。

2、结果的输出形式:当完成迷宫生成后,会提示输入入口与出口,进入迷宫路由查找算法,如找到出口,则打印出路径矩阵坐标,并显示显示迷宫生成图形3、测试数据:a、进入界面,选择2,自动生成b、输入入口与出口c、查看结果1.4.运行环境:运行环境为DOS第二章:算法设计与流程图2.1.主函数的流程图:图1迷宫算法流程图1、为了实现上述功能,需要:①构造一个二维数组maze[M+2][N+2]用于存储迷宫矩阵,构造一个二维数组backup[M+2][N+2]用于备份迷宫矩阵;②自动或手动生成迷宫,即为二维数组maze[M+2][N+2]赋值并备份;③将构造一个堆栈用于存储迷宫路由;④建立迷宫节点struct Mlink,用于存储迷宫中每个访问过的节点。

⑤实现迷宫路由算法,用深度优先遍历实现查找迷宫路径。

如找到路径则显示路径,否则提示无通路。

同时显示生成迷宫。

⑥在屏幕上显示操作菜单。

2、本程序包含6 个函数:( 1 )主函数main( )( 2 )生成迷宫函数create( )( 3 )打印迷宫矩阵与图形函数prin( )( 4 )寻找迷宫路由Mazepath( )( 5 )输出迷宫通路坐标printonglu1( )( 6 )输出迷宫生成图形printonglu2( )各函数之间的关系如下图(图2)所示:函数关系图:create( )prin( )main() Mazepath( )printonglu1( )printonglu2( )图2各函数间关系图实现概要设计中定义的所有数据类型,对各个操作给出伪代码算法。

对于主程序和各个模块也给出相应的伪代码算法。

1.节点类型和指针类型迷宫矩阵类型:Mlink *stack; 全局变量堆栈,存储迷宫通路int abc[M+2][N+2] 辅助数组int maze[M+2][N+2]; 迷宫矩阵int backup[M+2][N+2]; 备份矩阵,便于操作,定义为全局变量迷宫中节点类型及队列类型:struct Mlink { int row ,col ;struct node * next;} Mlink;2.迷宫的操作(1)生成迷宫void create(int maze[][N+2]){定义变量i,j,flag;srand( (unsigned)time( NULL ) ) 以时间产生随机种子利用for初始化迷宫矩阵与备份矩阵,包括边界全置为1利用for将迷宫置为0选择迷宫生成方式1为手动生成,2为自动生成,输入值并赋给flagflag=1{以i , j 控制迷宫中行列数的循环输入以0 表示通路,以1 表示障碍,给maze[i][j]赋值,不包括边界。

循环结束,完成迷宫生成}flag=2{定义变量i1,j1用以接收随机值以i , j 控制迷宫中行列数的循环赋值操作以0 表示通路,以1 表示障碍用for(c=1;c<=M*N;c++){i1=(int)(rand()%M)+1;j1=(int)(rand()%N)+1;maze[i1][j1]=int(rand()%2);}随机定位矩阵一点,给maze[i1][j1]赋一个随机值,这样可以增加迷宫通路的概率,循环结束,完成迷宫生成}以i , j 控制迷宫中行列数的循环赋值操作,将maze[][]备份到backup[][];}(2)打印迷宫矩阵与字符图形void prin(int maze[][N+2]){此函数主要用于将迷宫矩阵显示出来定义变量i,j,z;for(z=1;z<=N;z++){if(z<10)printf("%d ",z);elseprintf("%d",z);} 此语句用来标明列号用 for 控制循环在第一重循环里,使用语句{printf("\n");if(i<10) printf("%d ",i);else printf("%d",i);}以此用来标明行号以 i, j 控制迷宫中行列数的循环操作,将maze[i][j]显示出来并用字符□,■分别代表可通与不可通}(3)迷宫求解路由求解操作{Mlink *p;用以操作堆栈①入口若不通,return(0)否则下一步②将其入栈③未找到出口并且堆栈不空{1)栈顶位置以下是否可通,可通则返回②,否则2),2)栈顶位置以上是否可通,可通则返回②,否则3),3)栈顶位置以右是否可通,可通则返回②,否则4),4)栈顶位置以左是否可通,可通则返回②,否则出栈并返回,}④如果栈顶为出口,return (1);否则return (0);}(4)打印迷宫通路坐标void printonglu1(){Mlink *q;用以操作堆栈q=stackq不空{输出q指向的坐标q=q->next}}(5)输出迷宫通路的字符图形void printonglu2(){此函数根据堆栈内栈顶与“次栈顶”的位置关系决定输出字符↑,←,→或↓,其中2=↑,3=←,4=→,5=↓所有的操作都是在备份矩阵backup[][]上。

出口位置输出㊣int i,z,j;Mlink *p=stack;p不空{if(p->row>p->next->row) backup[p->next->row][p->next->col]=5;下一位置在下else if(p->row<p->next->row) backup[p->next->row][p->next->col]=2;下一位置在上else if(p->col>p->next->col) backup[p->next->row][p->next->col]=4;下一位置在右else ;下一位置在左}利用for循环,i,j为循环控制变量输出备份矩阵backup[][]{为0是输出“□”为1是输出“■”为2是输出“↑”为3是输出“←”为4是输出“→”为5是输出“↓”为6是输出“㊣”}另外在输出语句上,与矩阵输出相同,标明了行号与列号(该功能为王教授所要求而后加的) }3.主函数void menu(){定义迷宫数组矩阵maze[M+2][N+2]定义辅助数组abc[M+2][N+2] 以用来在可以在第一次产生迷宫中重复选择入口与出口定义变量k以用来控制循环定义整型变量 x1,y1 ,用于存储入口。

相关文档
最新文档