注意di的运用,每个栈元素都记录了di值,通过while循环则不会重复找到上次已找过的路径。
总结:利用栈来解决迷宫的问题,是深度优先搜索。首先将入口入栈,然后寻找该入口下一步可走的方块(不仅要将方块入栈,还要记录该方块的方位,因此就像上面所说的一样,要注意di的运用,通过while循环,就不会重复找到上次已经招工的路径)。
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
#define M 8
#define N 8
struct
{
int i;
int j;
int di;
}Stack[MaxSize]; //定义一个结构体数组
int top = -1;
int mg[M+2][N+2] = { //在外面加一堵墙
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
void mgpath()
{
int i,j,di,find,k;
top ++;
Stack[top].i = 1; Stack[top].j = 1;Stack[top].di = -1;mg[1][1] = -1;
while(top>-1)
{
i = Stack[top].i; j = Stack[top].j; di = Stack[top].di;
if(i == M && j == N)
{
printf("迷宫路径如下:\n");
for(k=0;k<=top;k++)
{
printf("\t(%d, %d)", Stack[k].i,Stack[k].j);
if(k %5 == 0)
printf("\n");
}
printf("\n");
return ;
}
find = 0;
while(di<3 && find ==0)
{
di++;
switch(di)
{
case 0:i = Stack[top].i-1;j = Stack[top].j;break;
case 1:i = Stack[top].i;j = Stack[top].j+1;break;
case 2:i = Stack[top].i+1;j = Stack[top].j;break;
case 3:i = Stack[top].i;j = Stack[top].j-1;break;
}
if(mg[i][j] == 0)
find = 1;
}
if(find == 1)
{
Stack[top].di = di;
top ++;
Stack[top].i = i;
Stack[top].j = j;
Stack[top].di = -1;
mg[i][j] = -1;
}
else
{
mg[Stack[top].i][Stack[top].j] = 0;
top --;
}
}
}
int main(void)
{
mgpath();
return 0;
}
分享到:
相关推荐
自己编写的 走迷宫-栈 cpp 代码 交流 交流
迷宫-用栈实现的,数据结构严蔚敏版上的,迷宫-用栈实现的,数据结构严蔚敏版上的
在本主题“数据结构-栈的应用-迷宫求解”中,我们将探讨如何利用栈来解决迷宫路径搜索的问题。 首先,迷宫求解是一个典型的图遍历问题,可以通过深度优先搜索(DFS)或广度优先搜索(BFS)等算法来解决。在这里,...
在本项目中,我们关注的是一个特定的数据结构——顺序栈,以及如何利用它来解决迷宫求解问题。顺序栈是一种线性数据结构,它的元素按顺序排列,操作主要涉及在栈顶进行插入(压栈)和删除(弹栈)。 首先,让我们...
"数据结构-栈与队列的应用-求解迷宫路径问题" 在这篇实验报告中,我们主要讨论了栈和队列的应用在解决迷宫路径问题方面的实践。我们将详细介绍实验的设计人员相关信息、实验目的与要求、实验内容、实验步骤与过程等...
这两种算法都是图遍历的基础,通过栈(DFS)或队列(BFS)来存储待访问的节点。 在"数据结构课程设计_1515925092_卞政淏_20161210204850656.zip"这个文件中,我们可以期待看到卞政淏同学的迷宫设计方案。可能包括他...
在解决实际问题时,栈的特性往往被巧妙地利用,例如在迷宫求解的问题中。本文将深入探讨栈如何应用于迷宫求解,并解析程序Stack_MazePath的相关知识点。 迷宫求解通常可以转化为一个图的遍历问题,而栈在这种情况下...
- 使用C++语言编写,通过结构体和指针管理栈和迷宫数据。 - 动态内存分配(realloc)来调整栈的大小,以适应不同规模的迷宫。 - 使用条件判断和循环结构来实现路径搜索,确保算法的正确性。 通过这个实验,学习者...
4. **路径回溯**:在解决迷宫或图遍历问题时,栈可以帮助存储回溯路径。 #### 四、栈的顺序实现 栈可以通过数组实现,这种方式称为顺序栈。《Java基础复习笔记05数据结构-栈》中给出的代码示例即为一种顺序栈的...
基于栈实现的迷宫问题 本文将详细介绍基于栈实现的迷宫问题,包括问题描述、算法基本思想、迷宫构建、位置搜索、算法运行环境、主要函数、算法举例、算法复杂度分析等方面的知识点。 问题描述 在一个二维阵列构成...
### 使用栈实现迷宫路径求解 #### 一、引言 在计算机科学与技术领域,数据结构的应用极为广泛,其中栈作为一种特殊的线性表,只允许在一端进行插入和删除操作,通常被称为“先进后出”(First In Last Out, FILO)...
- 定义了栈(ADTStack)的抽象数据类型,用于存储迷宫路径中的通道块信息,包括通道块的序号、坐标位置以及下一个通道块的方向。 - 定义了迷宫(ADT maze)的抽象数据类型,包含迷宫中的元素(空格、井号、终点)...
- 回溯算法:在解决如八皇后问题、迷宫求解等回溯问题时,双端栈可以辅助进行状态的保存和恢复。 - 操作系统中的任务调度:双端栈可以用于管理进程的上下文切换,方便记录和恢复执行状态。 - 历史记录功能:比如...
标题中的“migong.rar_migong_数据结构 迷宫_栈的应用_迷宫 栈_迷宫问题”暗示了这是一个关于使用栈解决迷宫问题的案例。迷宫问题通常涉及到寻找从起点到终点的有效路径,而栈在这里起到了记录和回溯路径的作用。 ...
在实际编程中,栈和队列不仅可以单独使用,还可以组合使用,形成复杂的数据结构,如队列-栈混合结构,用于解决各种问题,如汉诺塔问题、迷宫求解等。理解和熟练运用这两种数据结构,对于理解和编写高效的算法至关...
在本主题中,我们将重点讨论如何利用非递归算法,特别是栈数据结构来解决迷宫问题。 首先,栈是一种后进先出(LIFO)的数据结构,适用于解决需要回溯的问题,例如深度优先搜索(DFS)。在迷宫问题中,我们可以将栈...
5. **回溯算法**:在解决搜索和优化问题时,栈用于记录回溯路径,例如八皇后问题、迷宫问题等。 在试验中,你可能需要设计和实现一些基于栈的应用,比如模拟表达式求值的过程,或者编写一个简单的括号匹配器。这将...
将迷宫转化为int型矩阵 从起点出发,如果当前通道为空,则当前通道加入路径,即入栈,并探索右方的下一个通道,将下一个通道作为当前通道进行判断,循环直到找到终点。 如果当前位置不可达,则退回路径中的上一个...
在这个案例中,我们讨论的是使用C语言实现的迷宫程序,它利用了数据结构中的栈来解决这一问题。栈是一种后进先出(LIFO)的数据结构,非常适合用于回溯路径或者在迷宫中寻找解决方案。 首先,我们要理解迷宫问题的...