


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、WORD格式数据构造课程设计报告- 迷宫问题求解学号: 1315925375*:X晓龙班级:13移动 1班指导教师:钱鸽专业资料整理WORD格式目录一、需求分析3二、数据构造31. 数据构造设计考虑32. 逻辑构造存储构造3三、算法设计4四、调试分析7五、程序实现及测试8六、体会及缺乏之处9七、参考文献10八、源代码10专业资料整理WORD格式一、需求分析本课程设计是解决迷宫求解的问题, 从入口出发, 顺某一方向向前探索,假设能走通,那么继续往前走;否那么沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的构造来保存从入
2、口到当前位置的路径。 因此,在求迷宫通路的算法中要应用“栈 的思想假设 “当前位置 指的是 “在搜索过程中的某一时刻所在图中某个方块位置,那么求迷宫中一条路径的算法的根本思想是:假设当前位置 “可通,那么纳入“当前路径 ,并继续朝 “下一位置探索,即切换“下一位置为“当前位置 ,如此重复直至到达出口;假设当前位置“不可通,那么应顺着“来向退回到“前一通道块,然后朝着除“来向之外的其他方向继续探索;假设该通道块的四周4 个方块均“不可通 ,那么应从“当前路径上删除该通道块。所谓“下一位置指的是当前位置四周 4 个方向上、下、左、右上相邻的方块。假设以栈记录“当前路径,那么栈顶中存放的是“当前路径
3、上最后一个通道块。由此,“纳入路径的操作即为“当前位置入栈;“从当前路径上删除前一通道块的操作即为“出栈。二、数据构造1. 数据构造设计考虑1) 建立一个二维数组表示迷宫的路径0 表示通道, 1 表示墙壁;2) 创立一个栈, 用来存储“当前路径 ,即“在搜索过程中某一时刻所在图中某个方块位置。2. 逻辑构造存储构造1) 创立一个 Int 类型的二维数组 int mazen1n2, 用来存放 0 和 1 0 表示通道,1 表示墙壁;2) 创立一个构造体用来储存数组信息构造体:typedef struct/ 迷宫内部设置int shu1616;int row;int col;Maze;创造一个链栈
4、struct nodeint row;int col;struct node *next;专业资料整理WORD格式三、算法设计首先,创立数组的大小,此数组大小要求用户自己输入。具体算法:printf(" 输入迷宫的形状!n");scanf("%d%d",&x,&y);Maze m;CreatInit(&m,x,y);函数:void CreatInit(Maze *m,int x,int y)/创立迷宫printf("please input number:n");int i,j;for(i=0;i<=x;
5、i+)for(j=0;j<=y;j+)m->shuij = 2;for(i=1;i<=x;i+)for(j=1;j<=y;j+)scanf("%d",&m->shuij);m->row = x;m->col = y;其中的 0 和 1 分别是表示通路和障碍,定义的数组其实就是迷宫的设计图其次,产生迷宫,算法:for(i=1;i<=x;i+)for(j=1;j<=y;j+)printf("%dt",m.shuij);printf("n");最后, 迷宫寻路,在寻路的时候,我们
6、应从输入的入口位置进入迷宫, 当迷宫的入口处有障碍或者出口被堵, 再或者没有通路时整个程序完毕, 并输出迷宫无解的提示。 如果迷宫求解过程中没有出现无解情况, 那么在求解的过程中, 会输出迷宫的通路路径, 并且输出坐标值,让使用者更清楚路径的走法。 在寻路的过程中, 每走过一个格, 那个格得知就会被赋值为 -1,用来标记此处已走过, 免去了来来回回的重走, 以免出现死循环, 这样程序就能从入口进入到迷宫当中。如果在迷宫当中没有通路的话, 可以完毕循环输出“迷宫无解! ,那么当迷宫如果出现有解时, 就会输出路径。 这样就简单的实现了,有解无解的输出。从而实现了要求的程序!代码如下:专业资料整理W
7、ORD格式while(x1 >= 1 && x1 <= x) | (y1 >= 1 && y1<= y)专业资料整理WORD格式if(x1 = x2 && y1 = y2)break;if(m.shux1y1+1 = 0 )y1=y1+1;push(x1,y1);m.shux1y1 = -1;continue;if(m.shux1-1y1=0 )x1=x1-1;push(x1,y1);m.shux1y1 = -1;continue;if(m.shux1y1-1=0 )y1=y1-1;push(x1,y1);m.shux1y
8、1= -1;continue;if(m.shux1+1y1=0 )x1=x1+1;push(x1,y1);m.shux1y1= -1;continue;pop();if(p->next=NULL)break;x1=p->row;y1=p->col;if(x1 = x2 && y1 = y2)专业资料整理WORD格式while(p->next != NULL)专业资料整理WORD格式printf("%d %dn",p->row,p->col);pop();elseprintf("No Answer !")
9、;其中要寻求所有的通路,在这里那么使用了一个while 循环,这样可以找到所有的通路。图解分析:整体流程图:开场输入数据是否操作判定开场专业资料整理WORD格式迷宫内部操作流程图:专业资料整理WORD格式开场数据否方向是数据入栈完毕四、调试分析第一个问题,在刚开场的调试过程中,我们遇到了,无法判断走过的路程,从而出现了死循环,导致程序不能正常进展,但是经过我们的讨论,我们想出用标记的方法来解决,也就是让走过的路程全给标示了,这样就不会再走重复的路。第二个问题, 就是性用菜单来实现操作,那样程序的操作性就会更强,所以我们就要把所有的方法, 给写成一个个的函数来调用,这样就遇到了参量传递的问题,但
10、是经过我们的参考以及从书本上的实例, 我们慢慢地更深的了解到了参量传递的应用,那么这个问题也就迎刃而解了。从此我们实现了菜单操作!专业资料整理WORD格式五、程序实现及测试运行界面:开场界面专业资料整理WORD格式六、体会及缺乏之处通过此次课程设计,是我对于数据构造有了更深的了解,更新的认识。数据构造是一门重要的课程, 只有数据构造学得扎实了,才能对于计算机有更深的应用,所以学好数据构造是很重要的。 经过两周的上机设计,我实现了简单的迷宫求解, 能够简单的实现求解过程。但是还存在着缺乏之处,本程序不能循环执行,只能执行一次。有待改进!专业资料整理WORD格式七、参考文献1、" 数据构
11、造 (c 语言版 ) "严蔚敏清华大学2、" 数据构造实验教程"李业丽、X良斌" 数据构造"高教3、" 数据构造习题"李春保清华大学4、" 数据构造习题"严蔚敏清华大学5、" C 语言与数据构造"王立柱清华大学6、" 数据构造 (C 语言篇 )习题与解析"李春保 清华大学。八、源代码#include <stdio.h>#include <stdlib.h>typedef struct/ 迷宫内部设置int shu1616;int row;in
12、t col;Maze;struct nodeint row;int col;struct node *next;struct node *p;void push(int x1,int y1)struct node *a;a=(struct node *)malloc(sizeof(struct node);a->row=x1;a->col=y1;a->next=p;p=a;专业资料整理WORD格式void pop(void)专业资料整理WORD格式struct node *q;q=p;p=p->next;free(q);void CreatInit(Maze *m,in
13、t x,int y)/创立迷宫printf("please input number:n");int i,j;for(i=0;i<=x;i+)for(j=0;j<=y;j+)m->shuij = 2;for(i=1;i<=x;i+)for(j=1;j<=y;j+)scanf("%d",&m->shuij);m->row = x;m->col = y;void menu()printf("n*n");专业资料整理WORD格式printf("printf("欢迎进
14、入迷宫1、进入迷宫n");n");专业资料整理WORD格式printf("2、退出n");专业资料整理WORD格式int main(void)int t;int x,y;int x1,y1;int x2,y2;int i,j;while(1)menu();printf(" 请选择 :");专业资料整理WORD格式scanf("%d",&t);if(t = 2)break;printf(" 输入迷宫的形状!n");scanf("%d%d",&x,&y);
15、Maze m;CreatInit(&m,x,y);for(i=1;i<=x;i+)for(j=1;j<=y;j+)printf("%dt",m.shuij);printf("n");printf(" 输入入口位置:");scanf("%d%d",&x1,&y1);printf(" 输入出口的位置:");scanf("%d%d",&x2,&y2);p=(struct node *)malloc(sizeof(struct no
16、de);p->row=0;p->col=0;p->next=NULL;push(x1,y1);while(x1 >= 1 && x1 <= x) | (y1 >= 1 && y1<= y)if(x1 = x2 && y1 = y2)break;if(m.shux1y1+1 = 0 )y1=y1+1;push(x1,y1);m.shux1y1 = -1;continue;if(m.shux1-1y1=0 )x1=x1-1;push(x1,y1);m.shux1y1 = -1;continue;if(m.shux1y1-1=0 )专业资料整理WORD格式y1=y1-1;push(x1,y1);m.shux1y1= -1;continue;if(m.shux1+1y1=0 )x1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息处理技术员核心知识与试题及答案
- 逐渐明朗2025年法学概论考试试题及答案
- 计算机社会责任试题及答案
- VB学习障碍的试题及答案解决方案
- 软件架构评估与优化试题及答案
- 行政管理重要条例试题及答案
- 经济模型与政策决策的关联试题及答案
- 行政管理理论架构与试题答案解析
- 2025年软考课程资料及试题及答案分享
- 【盐城】2025年江苏盐城市部分事业单位招聘退役大学生士兵10人笔试历年典型考题及考点剖析附带答案详解
- 关于电子旅游合同范例
- 中国经导管左心耳封堵术临床路径专家共识(2025版)解读
- 煤矿数字化智慧矿山整体解决方案(技术方案)
- 理化外包合同协议
- 水务集团笔试题目及答案
- 实际施工人装修合同协议
- 无人机在水利行业的应用
- 特种设备-叉车应急预案
- 粘土心墙土石坝设计计算书
- 2025黔西南民族职业技术学院辅导员考试题库
- 2024年食品安全员考试必会试题与答案
评论
0/150
提交评论