`
Enria
  • 浏览: 11757 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

迷宫-栈

阅读更多

注意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;
}

 

0
1
分享到:
评论

相关推荐

    自编 走迷宫-栈 cpp 代码

    自己编写的 走迷宫-栈 cpp 代码 交流 交流

    迷宫-用栈实现的

    迷宫-用栈实现的,数据结构严蔚敏版上的,迷宫-用栈实现的,数据结构严蔚敏版上的

    数据结构-栈的应用-迷宫求解

    在本主题“数据结构-栈的应用-迷宫求解”中,我们将探讨如何利用栈来解决迷宫路径搜索的问题。 首先,迷宫求解是一个典型的图遍历问题,可以通过深度优先搜索(DFS)或广度优先搜索(BFS)等算法来解决。在这里,...

    数据结构(C语言) - 迷宫求解 - 顺序栈

    在本项目中,我们关注的是一个特定的数据结构——顺序栈,以及如何利用它来解决迷宫求解问题。顺序栈是一种线性数据结构,它的元素按顺序排列,操作主要涉及在栈顶进行插入(压栈)和删除(弹栈)。 首先,让我们...

    《数据结构》-李春葆 实验报告-栈与队列的应用-求解迷宫路径问题

    "数据结构-栈与队列的应用-求解迷宫路径问题" 在这篇实验报告中,我们主要讨论了栈和队列的应用在解决迷宫路径问题方面的实践。我们将详细介绍实验的设计人员相关信息、实验目的与要求、实验内容、实验步骤与过程等...

    迷宫--数据结构课程设计

    这两种算法都是图遍历的基础,通过栈(DFS)或队列(BFS)来存储待访问的节点。 在"数据结构课程设计_1515925092_卞政淏_20161210204850656.zip"这个文件中,我们可以期待看到卞政淏同学的迷宫设计方案。可能包括他...

    数据结构-栈的应用(迷宫求解)

    在解决实际问题时,栈的特性往往被巧妙地利用,例如在迷宫求解的问题中。本文将深入探讨栈如何应用于迷宫求解,并解析程序Stack_MazePath的相关知识点。 迷宫求解通常可以转化为一个图的遍历问题,而栈在这种情况下...

    数据结构-迷宫-实验报告与代码.doc

    - 使用C++语言编写,通过结构体和指针管理栈和迷宫数据。 - 动态内存分配(realloc)来调整栈的大小,以适应不同规模的迷宫。 - 使用条件判断和循环结构来实现路径搜索,确保算法的正确性。 通过这个实验,学习者...

    java基础数据结构-栈

    4. **路径回溯**:在解决迷宫或图遍历问题时,栈可以帮助存储回溯路径。 #### 四、栈的顺序实现 栈可以通过数组实现,这种方式称为顺序栈。《Java基础复习笔记05数据结构-栈》中给出的代码示例即为一种顺序栈的...

    基于栈实现的迷宫问题

    基于栈实现的迷宫问题 本文将详细介绍基于栈实现的迷宫问题,包括问题描述、算法基本思想、迷宫构建、位置搜索、算法运行环境、主要函数、算法举例、算法复杂度分析等方面的知识点。 问题描述 在一个二维阵列构成...

    用栈的方式实现迷宫的路径求解

    ### 使用栈实现迷宫路径求解 #### 一、引言 在计算机科学与技术领域,数据结构的应用极为广泛,其中栈作为一种特殊的线性表,只允许在一端进行插入和删除操作,通常被称为“先进后出”(First In Last Out, FILO)...

    数据结构-迷宫-实验报告及代码.doc

    - 定义了栈(ADTStack)的抽象数据类型,用于存储迷宫路径中的通道块信息,包括通道块的序号、坐标位置以及下一个通道块的方向。 - 定义了迷宫(ADT maze)的抽象数据类型,包含迷宫中的元素(空格、井号、终点)...

    算法-理论基础- 栈- 双端栈(包含源程序).rar

    - 回溯算法:在解决如八皇后问题、迷宫求解等回溯问题时,双端栈可以辅助进行状态的保存和恢复。 - 操作系统中的任务调度:双端栈可以用于管理进程的上下文切换,方便记录和恢复执行状态。 - 历史记录功能:比如...

    migong.rar_migong_数据结构 迷宫_栈的应用_迷宫 栈_迷宫问题

    标题中的“migong.rar_migong_数据结构 迷宫_栈的应用_迷宫 栈_迷宫问题”暗示了这是一个关于使用栈解决迷宫问题的案例。迷宫问题通常涉及到寻找从起点到终点的有效路径,而栈在这里起到了记录和回溯路径的作用。 ...

    第4章-栈与队列1

    在实际编程中,栈和队列不仅可以单独使用,还可以组合使用,形成复杂的数据结构,如队列-栈混合结构,用于解决各种问题,如汉诺塔问题、迷宫求解等。理解和熟练运用这两种数据结构,对于理解和编写高效的算法至关...

    迷宫问题的非递归算法(栈实现.rar_迷宫 栈_迷宫 问题 非递归 算法_迷宫 非递归_迷宫问题_迷宫问题栈

    在本主题中,我们将重点讨论如何利用非递归算法,特别是栈数据结构来解决迷宫问题。 首先,栈是一种后进先出(LIFO)的数据结构,适用于解决需要回溯的问题,例如深度优先搜索(DFS)。在迷宫问题中,我们可以将栈...

    数据结构试验6-栈及其应用

    5. **回溯算法**:在解决搜索和优化问题时,栈用于记录回溯路径,例如八皇后问题、迷宫问题等。 在试验中,你可能需要设计和实现一些基于栈的应用,比如模拟表达式求值的过程,或者编写一个简单的括号匹配器。这将...

    迷宫问题栈实现

    将迷宫转化为int型矩阵 从起点出发,如果当前通道为空,则当前通道加入路径,即入栈,并探索右方的下一个通道,将下一个通道作为当前通道进行判断,循环直到找到终点。 如果当前位置不可达,则退回路径中的上一个...

    用栈写的迷宫程序(C语言)

    在这个案例中,我们讨论的是使用C语言实现的迷宫程序,它利用了数据结构中的栈来解决这一问题。栈是一种后进先出(LIFO)的数据结构,非常适合用于回溯路径或者在迷宫中寻找解决方案。 首先,我们要理解迷宫问题的...

Global site tag (gtag.js) - Google Analytics