ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:156.32KB ,
资源ID:3046340      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3046340.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(123使用C语言解决迷宫问题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

123使用C语言解决迷宫问题.docx

1、123使用C语言解决迷宫问题前言1 什么是数据结构?数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构在计算机科学界至今没有标准的定义。各个大家根据自己的理解,都有不同的表述方式(如:Lobert L.Kruse在数据结构与程序设计一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。)。数据结构具体指同一类数据元素中,个元素之间的相互关系,包括三个组成成分,数据的逻辑结构,数据的存储结构和

2、数据运算结构。2 学习数据结构有什么用?有很多同学都认为学习数据结构没有多大用处,下面是作者在网上的一些疑问。同学甲:我学数据结构觉得它类似与高中时的数学,很难!但是没用好像就专门来考验一个人逻辑思维用的,为了要在同学间获得很聪明的虚荣,拼命的研究,从来也没有思考过到底它有什么用处。同学乙:老师总是对我们说想要在IT行业中有所成就就必须学好数据结构,但是我们现在学的这些什么栈、数组、图、树之类的东西,好像和我们编程没有什么联系。现在我们先来说说学习数据结构的意义数据结构是计算机科学与技术专业、计算机信息管理与应用专业,电子商务等专业的基础课,是十分重要的核心课程。所有的计算机系统软件和应用软件

3、都要用到各种类型的数据结构。因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付当前众多复杂的课题。要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。打好数据结构这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、数据库管理系统、软件工程、编译原理、人工智能、图视学等都是十分有益的。对于数据结构有什么用,人们就用了几点总结出来:1 程序结构数据算法;2 数据结构,总的来说,就是你的编程的基本功;3 语言更新太快,数据结构不可能过时;4 算法是对数据的处理;5 数据结构是以后编程的重中之重的基础!没有数据结构就没有编程这一说!

4、你的技术越高,数据结构越显重要!一 问题定义迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次试验终于得到它学习走迷宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。二 可行性研究科学技术快速发展的今天,我们也是有各种各样的娱乐生活,小朋友是祖国的未来,在哪个时代都是应该被重视的,小朋友的生活中娱乐智力开发显得格外重要

5、,迷宫游戏就是小朋友们非常熟悉的一种智力开发游戏,现在我们就为这种游戏开发一种能寻找路径的程序,为小朋友提供答案参考。迷宫问题处理系统的功能级数据流图三 需求分析所求路径必须是简单路径(即在求得的路径上不能重复出现同一个通道块)。假设“当前位置”指的是“在搜索过程中某一时刻所在图中某个方块的位置”,则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一个位置”探索,即切换到“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则顺着“来向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道快的四周4个方块均“不可通”

6、,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是“当前位置”四周4个方向(东、南、西、北)上相邻的方块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。四 总体设计4.1 数据结构设计考虑1)建立一个二维数组白哦是迷宫的路径(0表示通道,1表示墙壁);2)创建一个栈,用来存储“当前路径”,即“在搜素过程中某一时刻所在图中某个地方的位置”。4.2 逻辑结构存储结构1)创建一个Int类型的二维数组int mazen1n2,用来存放0和1(0表示通道,1表示墙壁);2)

7、创建一个结构体用来存储数组信息(数组的横坐标X,数组的纵坐标Y,方向C)结构体:Typedef struct nodeint x;int y;int c;linkstack;3)创造一个栈包括(top表示栈顶元素)Linkstack topn1*n2;4.3程序流程图程序流程图五 详细设计1 创建数组的大小,数组的大小要求用户自己定义。具体的算法:printf(“请输入迷宫的大小;”);/输入的大小就规定了数组大小的界限scanf(“%d”,&g);/再次用scanf来输入使用者要创建的迷宫大小,并且把值赋给g这个参量,用于对于迷宫数组的创建printf(“大小创建完毕,请输入迷宫:n”);/

8、此步用来提示用户输入迷宫2 用户自己定义迷宫的内容(其中自定义迷宫入口(1,0),迷宫的出口为(g-2,h-1)迷宫的生成的算法:void sz(int g,int h)/创建数组函数,设定参量并从主函数中获得要使用的参量int a,b;for(a=0;ag;a+)for(b=0;bh;b+)scanf(“%d”,&mazeab);/使用循环来给数组赋值,也就是用来创建迷宫的格式,这是一个自定义的迷宫创建,其中的0和1分别是表示通路和障碍,定义的数组其实就是迷宫的设计图3 产生迷宫(其中自定义迷宫入口(1,0),迷宫的出口为(g-2,h-1)算法:void scsu(int g,int h)/

9、创建迷宫输出函数,设置参量并从主函数中获得要使用的参量int a,b;printf(“生成的迷宫:n”);/提示要实现的内容是什么for(a=0;ag;a+)for(b=0;bh;b+)printf(mazeab?“#”:“”);printf(“n”);/使用循环语句来实现迷宫的变化,输出迷宫4 最后,迷宫寻路,在寻路的时候,我们应从入口(1,0)进入迷宫,当迷宫的入口处有障碍或者出口被堵塞,再或者没有通路时整个程序结束,并输出迷宫无解的提示。如果迷宫求解过程中没有出现无解情况,那么在求解的过程中,会输出迷宫的通路路径,并且输出坐标值,让使用者更清楚路径的走法。在寻路的过程中,每走过一个格,那

10、个格得知就会被赋值为2,用来标记此处已走过,免去了来来回回的重走,以免出现死循环,所以开始时的入口则直接的定义为了2,这样程序就能达到入口,并从入口进入到迷宫当中,如果在迷宫当中没有通路的话,就会使topi.c的值就变为零,这样当其为零时,可以结束循环输出“迷宫无解!”,则当迷宫如果出现有解时,则到最后的出口时仍然会将topi.c赋值为0,但是此时的出口被赋值为2,也就是用这个来判断是否存在通路,所以才实现了这些功能。这样就简单的实现了,有解无解的输出。从而实现了要求的程序!代码:switchcase:/为0时有两种情况走完全程或者没有通路run=0;if(v=1)/当v为1时说明此路没有走到

11、出口就已经没有路了,所以无通路printf(“此迷宫无通路!”);break;caseif(mazetopi.xtopi.y+1=0)/用来判断此处是否有障碍i+;topi.x=topi-1.x;topi.y=topi-1.y+1;mazetopi.xtopi.y=2;/进行赋值交换if(mazeg-2h-1=2)v=0;/如果在这里结束了那么出口处的坐标值变为2,使v等于0else topi.c+=1;/如果没有则进行下一步操作(下一个的各个方向的操作与第一个方向的相同)break;其中要寻求所有的通路,在这里则使用了一个dowhile循环,这样可以找到所有的通路,其条件使run。如果run

12、等于1,则进行循环,否则循环结束程序结束。另外的,菜单操作则是使用了switch操作,这样可以选择操作的步骤,如果选择1,则迷宫求解开始,如果选择2则直接结束操作(只有两个操作1 求解 2 退出)。六 编码#include#include#include#includetypedef int Status;#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct int row; int line;PosType;typedef struct int ord; Po

13、sType seat; int di;SelemType;typedef struct SelemType *base; SelemType *top; int stacksize;SqStack;Status InitStack (SqStack *S) S-base = (SelemType *)malloc(STACK_INIT_SIZE * sizeof(SelemType); if(!S-base) exit(-2); S-top = S-base; S-stacksize = STACK_INIT_SIZE; return OK;Status Push(SqStack *S,Sel

14、emType *e) if(S-top - S-base = S-stacksize) S-base = (SelemType *)realloc(S-base, (S-stacksize + STACKINCREMENT)*sizeof(SelemType); if(!S-base) exit(-2); S-top = S-base + S-stacksize; S-stacksize += STACKINCREMENT; *S-top+ = *e; return OK;Status Pop(SqStack *S,SelemType *e) if(S-top = S-base) return 0; *e = *-S-top; return OK;Status StackEmpty(SqStack *S) if(S-top = S-base) return OK; else return ERROR;void InitMaze(int maze1111) int i,j; srand(int)time(NULL); for( i = 0;i10;i+) maze0i = 0; for(i = 1; i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1