2数据结构实验报告二(栈和队列及其应用)
- 格式:doc
- 大小:26.00 KB
- 文档页数:5
栈和队列的实验报告栈和队列的实验报告引言:栈和队列是计算机科学中常用的数据结构,它们在算法设计和程序开发中起着重要的作用。
本实验旨在通过实际操作和观察,深入理解栈和队列的概念、特点以及它们在实际应用中的作用。
一、栈的实验1.1 栈的定义和特点栈是一种具有特殊操作约束的线性数据结构,它的特点是“先进后出”(Last-In-First-Out,LIFO)。
栈的操作包括入栈(push)和出栈(pop),入栈操作将元素放入栈顶,出栈操作将栈顶元素移除。
1.2 实验步骤在本次实验中,我们使用编程语言实现了一个栈的数据结构,并进行了以下实验步骤:1.2.1 创建一个空栈1.2.2 向栈中依次压入若干元素1.2.3 查看栈顶元素1.2.4 弹出栈顶元素1.2.5 再次查看栈顶元素1.3 实验结果通过实验,我们观察到栈的特点:最后入栈的元素最先出栈。
在实验步骤1.2.2中,我们依次压入了元素A、B和C,栈顶元素为C。
在实验步骤1.2.4中,我们弹出了栈顶元素C,此时栈顶元素变为B。
二、队列的实验2.1 队列的定义和特点队列是一种具有特殊操作约束的线性数据结构,它的特点是“先进先出”(First-In-First-Out,FIFO)。
队列的操作包括入队(enqueue)和出队(dequeue),入队操作将元素放入队尾,出队操作将队头元素移除。
2.2 实验步骤在本次实验中,我们使用编程语言实现了一个队列的数据结构,并进行了以下实验步骤:2.2.1 创建一个空队列2.2.2 向队列中依次插入若干元素2.2.3 查看队头元素2.2.4 删除队头元素2.2.5 再次查看队头元素2.3 实验结果通过实验,我们观察到队列的特点:最先入队的元素最先出队。
在实验步骤2.2.2中,我们依次插入了元素X、Y和Z,队头元素为X。
在实验步骤2.2.4中,我们删除了队头元素X,此时队头元素变为Y。
三、栈和队列的应用栈和队列在实际应用中有广泛的应用场景,下面简要介绍一些常见的应用:3.1 栈的应用3.1.1 表达式求值:通过栈可以实现对表达式的求值,如中缀表达式转换为后缀表达式,并计算结果。
实验二 栈和队列实现四则运算一、实验目的及要求:1、掌握栈和队列的基本操作:建立、插入、删除、查找、合并2、掌握用栈和队列的储存3、熟悉C 语言上机编程环境4、掌握编译、调试程序的方法二、实验内容:采用栈进行表达式的求值,表达式求值是程序设计语言编译中的一个最基本问题。
它的实现是栈应用的又一个典型例子,本报告使用的是“算符优先法”求表达式的值。
要把一个表达式翻译成正确求值的一个机器指令序列,或者直接对表达式求值,首先要能够正确解释表达式。
若要正确翻译则首先要了解算术四则运算的规则。
即:(1)、先乘除,后加减; (2)、从左算到右; (3)、先括号内后括号外。
任何一个表达式都是由操作数、运算符和界限符组成的,我们称它们为单词。
一般地,操作数既可以是常数也可以是被说明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。
为了叙述的简洁,我们仅讨论简单算术表达式的求值问题。
这种表达式只包含加、减、乘、除4种运算符。
我们把运算符和界限符统称为算符,它们构成的集合命名为OP 。
根据上述3条运算规则,在运算的每一步中,任意两个相继出现的算符1θ和2θ之间的优先级之多是以下3种关系之一:12θθ< 1θ的优先级低于2θ 12θθ= 1θ的优先级等于2θ 12θθ> 1θ的优先级高于2θ根据实际情况推导出如下的优先关系算符间的优先关系表有规则(3),+、-、*和/为1θ时优先性均低于“(”但高于“),”由规则(2),当12θθ=时,令12θθ>,“#”是表达式的结束符。
为了算法简洁,在表达式左右括号的最左边也虚设了一个“#”构成整个表达式的一对括号。
表中的“(”=“)”表示当左右括号相遇时,括号内的运算已经完成。
同理,“#”=“#”表示整个表达式求值完毕。
“)”与“(、“#”与“)”以及“(”与“#”之间无优先级,这是因为表达式中不允许它们相继出现,一旦遇到这种情况,则可以认为出现语法错误。
《数据结构》第五次实验报告学生姓名学生班级学生学号指导老师雷大江重庆邮电大学计算机学院一、实验内容1) 利用栈深度优先进行迷宫求解。
用数组表示迷宫建立栈,利用栈实现深度优先搜索2) 利用队列宽度优先进行迷宫求解。
用数组表示迷宫建立队列,利用队列实现宽度优先搜索二、需求分析利用栈的结构,走过的路入栈,如果不能走出栈,采用遍历法,因此栈内存储的数据就是寻一条路径。
当到达了某点而无路可走时需返回前一点,再从前一点开始向下一个方向继续试探。
因此,压入栈中的不仅是顺序到达的各点的坐标,而且还要有从前一点到达本点的方向,即每走一步栈中记下的内容为(行,列,来的方向)。
三、详细设计(1)基本代码struct item{int x ; //行int y ; //列} ;item move[4] ;(2)代码栈构造函数:void seqstack::Push(int x,int y,int d) //入栈{if(top>=StackSize-1)throw"上溢";top++;data[top].d=d;data[top].x=x;data[top].y=y;}寻找路径:int seqstack::findpath(int a,int b){item move[4]={{0,1},{1,0},{0,-1},{-1,0}};//定义移动结构int x, y, d, i, j ;Push(a,b,-1); //起点坐标入栈while(top!=-1){d=data[top].d+1;x=data[top].x;y=data[top].y;Pop(); //出栈while (d<4) //方向是否可以移动{i=x+move[d].x ; j=y+move[d].y ; //移动后坐标if(Map[i][j]==0) //是否能移动 {Push(x,y,d); //移动前坐标入栈x=i;y=j;Map[x][y]= -1 ;if(x==m&&y==n) //判断是否为终点坐标 {Push(x,y,-1);return 1 ;}else d=0 ;}else d++ ;}}return 0;}(3)伪代码a)栈初始化;b)将入口点坐标及到达该点的方向(设为-1)入栈c)while (栈不空){栈顶元素=(x , y , d)出栈 ;求出下一个要试探的方向d++ ;while (还有剩余试探方向时){ if (d方向可走)则 { (x , y , d)入栈 ;求新点坐标 (i, j ) ;将新点(i , j)切换为当前点(x , y) ;if ( (x ,y)= =(m,n) ) 结束 ;else 重置 d=0 ;}else d++ ;}}(4)时间复杂程度时间复杂程度为O(1)2.3 其他在运行时可选择是否自己构造地图,实现函数如下:void creatmap() //自创地图函数{for(int i=1;i<9;i++){for(int j=1;j<9;j++)Map[i][j]=0;}Map[8][9]=1;printmap();cout<<"请设置障碍物位置:(x,y)。
数据结构栈与队列的实验报告实验概述本次实验的目的是通过对栈和队列进行实现和应用,加深对数据结构中的栈和队列的理解和巩固操作技能。
栈和队列作为常见的数据结构在程序开发中得到了广泛的应用,本次实验通过 C++ 语言编写程序,实现了栈和队列的基本操作,并对两种数据结构进行了应用。
实验内容1. 栈的实现栈是一种先进后出的数据结构,具有后进先出的特点。
通过使用数组来实现栈,实现入栈、出栈、输出栈顶元素和清空栈等操作。
对于入栈操作,将元素插入到数组的栈顶位置;对于出栈操作,先将数组的栈顶元素弹出,再使其下移,即将后面的元素全部向上移动一个位置;输出栈顶元素则直接输出数组的栈顶元素;清空栈则将栈中所有元素全部清除即可。
3. 栈和队列的应用利用栈和队列实现八皇后问题的求解。
八皇后问题,是指在8×8 的国际象棋盘上放置八个皇后,使得任意两个皇后都不能在同一行、同一列或者同一对角线上。
通过使用栈来保存当前八皇后的位置,逐个放置皇后并检查是否有冲突。
如果当前位置符合要求,则将位置保存到栈中,并继续查询下一个皇后的位置。
通过使用队列来进行八数码问题的求解。
八数码问题,是指在3×3 的矩阵中给出 1 至 8 的数字和一个空格,通过移动数字,最终将其变为 1 2 3 4 5 6 7 8 空的排列。
通过使用队列,从初始状态出发,枚举每种情况,利用队列进行广度遍历,逐一枚举状态转移,找到对应的状态后进行更新,周而复始直到找到正确的答案。
实验结果通过使用 C++ 语言编写程序,实现了栈和队列的基本操作,并对八皇后和八数码问题进行了求解。
程序执行结果如下:栈和队列实现的基本操作都能够正常进行,并且运行效率较高。
栈和队列的实现方便了程序编写并加速了程序运行。
2. 八皇后问题的求解通过使用栈来求解八皇后问题,可以得到一组成立的解集。
图中展示了求解某一种八皇后问题的过程。
从左到右是棋盘的列数,从上到下是棋盘的行数,通过栈的操作,求出了在棋盘上符合不同要求(不在同一行、同一列和斜线上)的八皇后位置。
数据结构实验报告实验名称:实验2——栈和队列学生:班级:班序号:学号:日期:一、实验要求1、实验目的:进一步掌握指针、模板类、异常处理的使用掌握栈的操作的实现方法掌握队列的操作的实现方法学习使用栈解决实际问题的能力学习使用队列解决实际问题的能力2、实验容:根据栈和队列的抽象数据类型的定义,按要现一个栈或一个队列。
要求:实现一个共享栈实现一个链栈实现一个循环队列实现一个链队列编写测试main()函数测试线性表的正确性二、程序分析2.1 存储结构顺序栈、链栈和顺序队列顺序栈链栈顺序队列2.2 关键算法分析A、实现一个共享栈:a、伪代码实现入栈操作:如果栈满,则抛出上溢异常;判断是插在栈1还是栈2,如果在栈1插入,则栈顶指针top1加1,在top1处填入x,如果在栈2插入,则栈顶指针top2加1,在top2处填入x。
出栈操作:如果栈空,则抛出下溢异常;判断是栈1出栈还是栈2,如果是栈1,则输出栈1栈顶元素,并且top1减1,如果是栈2,则输出栈2栈顶元素,并且top2加1。
得到栈顶元素操作:如果栈空,则抛出下溢异常;判断是栈1出栈还是栈2,如果是栈1,则输出栈1栈顶元素,如果是栈2,则输出栈2栈顶元素。
b、算法实现:void shareseqstack::push(int x,int pushnumber)//进栈操作{if(top1+1==top2)//异常处理throw "上溢";if(pushnumber==1)//判断栈1还是栈2data[++top1]=x;if(pushnumber==2)data[--top2]=x;}void shareseqstack::pop(int popnumber)//出栈操作{if(popnumber==1) //异常处理{ if(top1==-1) throw "下溢";else cout<<data[top1--]<<endl;}if(popnumber==2) //异常处理{if(top2==seqstack) throw "下溢";else cout<<data[top2++]<<endl;}}void shareseqstack::gettop(int getnumber)//得到栈顶元素{if(getnumber==1) //判断栈1还是栈2{if(top1==-1) throw "下溢"; //异常处理cout<<data[top1]<<endl;}if(getnumber==2){if(top2==seqstack) throw "下溢";cout<<data[top2]<<endl;}}B、实现一个链栈插入删除a伪代码实现入栈:生成新结点,对新结点赋值,新结点的指向原栈顶指针,修改栈顶指针为新结点。
栈与队列实验报告总结实验报告总结:栈与队列一、实验目的本次实验旨在深入理解栈(Stack)和队列(Queue)这两种基本的数据结构,并掌握其基本操作。
通过实验,我们希望提高自身的编程能力和对数据结构的认识。
二、实验内容1.栈的实现:我们首先使用Python语言实现了一个简单的栈。
栈是一种后进先出(LIFO)的数据结构,支持元素的插入和删除操作。
在本次实验中,我们实现了两个基本的栈操作:push(插入元素)和pop(删除元素)。
2.队列的实现:然后,我们实现了一个简单的队列。
队列是一种先进先出(FIFO)的数据结构,支持元素的插入和删除操作。
在本次实验中,我们实现了两个基本的队列操作:enqueue(在队尾插入元素)和dequeue(从队头删除元素)。
3.栈与队列的应用:最后,我们使用所实现的栈和队列来解决一些实际问题。
例如,我们使用栈来实现一个算术表达式的求值,使用队列来实现一个简单的文本行编辑器。
三、实验过程与问题解决在实现栈和队列的过程中,我们遇到了一些问题。
例如,在实现栈的过程中,我们遇到了一个“空栈”的错误。
经过仔细检查,我们发现是因为在创建栈的过程中没有正确初始化栈的元素列表。
通过添加一个简单的初始化函数,我们解决了这个问题。
在实现队列的过程中,我们遇到了一个“队列溢出”的问题。
这是因为在实现队列时,我们没有考虑到队列的容量限制。
通过添加一个检查队列长度的条件语句,我们避免了这个问题。
四、实验总结与反思通过本次实验,我们对栈和队列这两种基本的数据结构有了更深入的理解。
我们掌握了如何使用Python语言实现这两种数据结构,并了解了它们的基本操作和实际应用。
在实现栈和队列的过程中,我们也学到了很多关于编程的技巧和方法。
例如,如何调试代码、如何设计数据结构、如何优化算法等。
这些技巧和方法将对我们今后的学习和工作产生积极的影响。
然而,在实验过程中我们也发现了一些不足之处。
例如,在实现栈和队列时,我们没有考虑到异常处理和性能优化等方面的问题。
栈和队列实验报告总结一、实验目的本次实验的主要目的是掌握栈和队列这两种数据结构的基本概念和操作方法,以及了解它们在计算机程序设计中的应用。
二、实验原理1. 栈栈是一种后进先出(LIFO)的数据结构,它可以看作是一种线性表。
栈顶指针指向栈顶元素,每次插入或删除元素时,都会改变栈顶指针的位置。
常见的操作有入栈(push)、出栈(pop)、取栈顶元素(top)等。
2. 队列队列是一种先进先出(FIFO)的数据结构,它也可以看作是一种线性表。
队头指针指向队头元素,队尾指针指向队尾元素。
常见的操作有入队(enqueue)、出队(dequeue)、取队头元素(front)等。
三、实验内容与步骤1. 栈本次实验中我们需要完成以下操作:① 初始化一个空栈;② 将10个整数依次压入栈中;③ 弹出3个整数并输出;④ 将5个整数依次压入栈中;⑤ 弹出所有整数并输出。
具体步骤如下:Step 1:定义一个Stack类,并在其中定义初始化、入栈、出栈、取栈顶元素等方法;Step 2:在主函数中创建一个Stack对象,并调用初始化方法;Step 3:使用循环将10个整数依次压入栈中;Step 4:使用循环弹出3个整数并输出;Step 5:使用循环将5个整数依次压入栈中;Step 6:调用出栈方法弹出所有整数并输出。
2. 队列本次实验中我们需要完成以下操作:① 初始化一个空队列;② 将10个整数依次加入队列中;③ 弹出3个整数并输出;④ 将5个整数依次加入队列中;⑤ 弹出所有整数并输出。
具体步骤如下:Step 1:定义一个Queue类,并在其中定义初始化、入队、出队、取队头元素等方法;Step 2:在主函数中创建一个Queue对象,并调用初始化方法;Step 3:使用循环将10个整数依次加入队列中;Step 4:使用循环弹出3个整数并输出;Step 5:使用循环将5个整数依次加入队列中;Step 6:调用出队方法弹出所有整数并输出。
数据结构栈与队列实验报告学院:数学与计算机学院班级:计算机科学与技术姓名:***学号:************实验三栈与队列一、实验目的:(1)熟练掌握栈和队列的结构以及这两种数据结构的特点、栈与队列的基本操作。
(2)能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法;(3)熟练掌握链队列和循环队列的基本运算,并特别注意队列满和队列空的判断条件和描述方法;(4)掌握栈的应用;二、实验要求:(1) 给出程序设计的基本思想、原理和算法描述。
(2) 对源程序给出注释。
(3) 记录程序的运行结果,并结合程序进行分析。
三、程序设计的基本思想、原理和算法描述:四、实验内容:1、利用栈的基本操作将一个十进制的正整数转换成R进制数据,并将其转换结果输出。
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define stack_init_size 100#define stackincrement 10typedef struct sqstack {int *base;int *top;int stacksize;} sqstack;int StackInit(sqstack *s){ s->base=(int *)malloc(stack_init_size *sizeof(int));if(!s->base)return 0;s->top=s->base;s->stacksize=stack_init_size;return 1;}int Push(sqstack *s,int e){if(s->top-s->base>=s->stacksize){s->base=(int *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(int));if(!s->base)return 0;s->top=s->base+s->stacksize;s->stacksize+=stackincrement;}*(s->top++)=e;return e;}int Pop(sqstack*s,int e){if(s->top==s->base)return0;e=*--s->top;return e;}int stackempty(sqstack*s){if(s->top==s->base){return1;}else{return0;}}int conversion(sqstack*s){int n,e=0,flag=0;printf("输入要转化的十进制数:\n");scanf("%d",&n);printf("要转化为多少进制:2进制、8进制、16进制填数字!\n"); scanf("%d",&flag);printf("将十进制数%d转化为%d进制是:\n",n,flag);while(n){Push(s,n%flag);n=n/flag;}while(!stackempty(s)){e=Pop(s,e);switch(e){case10:printf("A");break;case11:printf("B");break;case 12: printf("C");break;case 13: printf("D");break;case 14: printf("E");break;case 15: printf("F");break;default: printf("%d",e);}}printf("\n");return 0; }int main(){sqstack s;StackInit(&s);conversion(&s);return 0;}2、回文数判断#include<stdio.h>#include<string.h>#define MAX 50#define FALSE 0#define TURE 1//定义栈typedef struct{char elem[MAX];int top;}SeqStack;//定义循环队列typedef struct{char element[MAX];int front;int rear;}SeqQuene;//初始化栈void InitStack(SeqStack *S){S->top = -1;//构造一个空栈}//入栈int Push(SeqStack *S,char x,int cnt) {if(S->top == cnt-1)return(FALSE);S->top++;S->elem[S->top] = x;return(TURE);}//出栈int Pop(SeqStack * S,char * x){if(S->top == -1)return(FALSE);else{*x = S->elem[S->top];S->top--;return(TURE);}}//初始化队列void InitQuene(SeqQuene *Q){Q->front = Q->rear = 0;}//入队int EnterQuene(SeqQuene *Q,char x,int cnt) {if((Q->rear+1)%(cnt+1) == Q->front)return(FALSE);Q->element[Q->rear] = x;Q->rear = (Q->rear+1)%(cnt+1);return(TURE);}//出队int DeleteQuene(SeqQuene *Q,char *x,int cnt) {if(Q->front == Q->rear)return(FALSE);*x = Q->element[Q->front];Q->front = (Q->front+1)%(cnt+1);return(TURE);}//主函数void main(){int i,cnt,flag;SeqStack s;SeqQuene q;char a[MAX],b[MAX],c[MAX];flag=0;printf("请输入由*结束且小于%d的回文序列:\n",MAX); for(i = 0;i<MAX+1;i++){scanf("%c",&a[i]);if(a[i] == '*')break;}cnt = i;InitStack(&s);InitQuene(&q);for(i = 0;i<cnt;i++){EnterQuene(&q,a[i],cnt);Push(&s,a[i],cnt);}for(i = 0;i<cnt+1;i++){DeleteQuene(&q,&b[i],cnt);printf("%c",b[i]);}printf("\n");for(i = 0;i<cnt+1;i++){Pop(&s,&c[i]);printf("%c",c[i]);}printf("\n");for(i = 0;i<cnt+1;i++){if(b[i] == c[i])flag = 1;else{flag = 0;break;}}if(flag)printf("Right");elseprintf("Wrong");printf("\n"); }五、运行结果。
栈和队列实验报告实验名称:栈和队列的实验研究摘要:本实验旨在通过设计并实现基于栈和队列的算法,探索其在数据结构和算法中的应用。
通过实验比较栈和队列的性能差异和适用场景,加深对栈和队列的理解和应用。
实验结果表明,栈和队列在不同的问题场景中具有不同的优势和适用性。
关键词:栈、队列、数据结构、算法、应用一、引言栈和队列是数据结构中常见且重要的两种数据结构,它们分别以LIFO(Last In First Out,后进先出)和FIFO(First In First Out,先进先出)的方式操作数据,广泛应用于各领域的编程和算法设计中。
本实验通过实现栈和队列相关操作的算法,探索它们在实际应用中的效率和优势。
二、实验设计与实现1.实验设计本实验采用C++语言来实现栈和队列的操作,并编写相应的算法来解决一些典型问题。
实验将比较栈和队列在以下几个方面的性能差异:a)插入操作的性能b)删除操作的性能c)查询操作的性能d)栈和队列的空间占用情况2.实验步骤a)设计栈的数据结构和相关操作的算法。
b)设计队列的数据结构和相关操作的算法。
c)分别使用栈和队列来解决一个典型问题,并比较它们的效率。
d)分析实验结果,总结栈和队列的适用场景和优势。
三、实验结果与分析1.栈的性能比较在本次实验中,我们使用栈来解决斐波那契数列问题。
首先,我们设计了一个栈的数据结构,并实现了如下操作:a) 入栈(push):将元素添加到栈顶。
b) 出栈(pop):将栈顶元素移出栈。
c) 查询栈顶元素(top):返回栈顶元素。
对比使用数组和链表实现栈的性能,我们发现使用链表实现的栈在插入和删除操作上有更好的性能表现,而使用数组实现的栈在查询操作上更高效。
这是因为使用链表实现的栈不需要移动大量元素,而使用数组实现的栈可以通过索引直接访问任意位置的元素。
2.队列的性能比较在本次实验中,我们使用队列来解决击鼓传花问题。
首先,我们设计了一个队列的数据结构,并实现了如下操作:a) 入队(enqueue):将元素添加到队列末尾。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
1
实验二 栈和队列及其应用
一、实验目的
1. 掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正
确选用它们。
2. 熟练掌握栈类型的两种实现方法。
3. 熟练掌握循环队列和链队列的基本操作实现算法。
二、实验内容
用队列求解迷宫问题
[问题描述]
以一个M*N的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。设计
一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路
的结论。
[基本要求]
实现一个以顺序存储结构的队列类型,然后编写一个求解迷宫的非递归程序。求得的通
路以三元组(i,j,pre)的形式输出,其中:(i,j)指示迷宫中的一个坐标,pre表示本路
径中上一个方块在队列中的下标。
[测试数据] 由学生任意指定。
三、源代码
# include
#define M 5 //行数
#define N 5 //列数
#define MaxSize 100 //队最多元素个数
int mg[M+2][N+2]={ //一个迷宫,其四周要加上均为1的外框{1,1,
{1,1,1,1,1,1,1},
{1,0,0,0,0,0,1},
{1,0,1,0,0,1,1},
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
2
{1,0,1,0,0,1,1},
{1,0,1,0,1,0,1},
{1,0,0,0,0,0,1},
{1,1,1,1,1,1,1}
};
typedef struct
{int i,j;
int pre;}
Box;
typedef struct
{
Box data[MaxSize];
int front, rear;
}QuType;
void mgpath1(int xi,int yi,int xe,int ye) //搜索路径为:(xi,yi)
->(xe,ye)
{ void print (QuType qu, int front );
int i,j,find=0,di;
QuType qu; //定义顺序队
qu.front=qu.rear=-1;
qu.rear++;
qu.data[qu.rear].i=xi; //(xi,yi)进队
qu.data[qu.rear].j=yi;
qu.data[qu.rear].pre=-1;
mg[xi][yi]=-1;
while(qu.front!=qu.rear&&!find)
{qu.front++;
i=qu.data[qu.front].i;j=qu.data[qu.front].j;
if(i==xe&&j==ye)
{find=1;
print(qu,qu.front);
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
3
}
for
(di=0;di<4;di++)
{
switch(di)
{
case
0 :i=qu.data[qu.front].i-1;j=qu.data[qu.front].j;break;
case
1 :i=qu.data[qu.front].i;j=qu.data[qu.front].j+1;break;
case
2 :i=qu.data[qu.front].i+1;j=qu.data[qu.front].j+1;break;
case
3 :i=qu.data[qu.front].i;j=qu.data[qu.front].j-1;break;
}
if(mg[i][j]==0)
{find=1;
qu.rear++;
qu.data[qu.rear].i=i; qu.data[qu.rear].j=j;
qu.data[qu.rear].pre=qu.front;
mg[i][j]=-1;
}
}
}
}
void print (QuType qu, int front )
{
int k=front,j,ns=0;
printf("\n");
do
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
4
{j=k;
k=qu.data[k].pre;
qu.data[j].pre=-1;
}
while (k!=0);
printf("迷宫路径如下:\n");
k=0;
while(k
if(qu.data[k].pre==-1)
{
ns++;
printf("\t(%d,%d)",qu.data[k].i,qu.data[k].j);
if(ns%5==0)printf("\n");
}
k++;
}
printf("\n");
}
void main()
{ mgpath1(1,1,M,N);
printf("迷宫所有路径如下:\n");
}
四、测试结果:
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
5
五、心得体会
做实验首先要掌握大量的理论知识,然后认真去完成实验。做实验过程会碰见较
大的困难,这就要需要我们的毅力。小小的迷宫隐藏大大的奥秘。