个人摸索写的代码,不保证严谨和安全性,仅供参考而已。
stack.h
/* * stack.h * * Created on: 2012年8月20日 * Author: h */ #ifndef STACK_H_ #define STACK_H_ #define STACK_INIT_SIZE 10 #define STACK_INCREME_SIZE 10 //typedef int ElemType; typedef struct { ElemType *top; ElemType *base; int size; } STACK; STACK * initStack(); int push(STACK *s, ElemType *e); int pop(STACK *s, ElemType *e); int isEmpty(STACK *s); void destoryStack(STACK *s); #endif /* STACK_H_ */
stack
/* * stack.c * * Created on: 2012年8月20日 * Author: h */ #include "maze.h" #include "stack.h" #include <stdio.h> #include <stdlib.h> STACK * initStack() { STACK *s = (STACK *)malloc(sizeof(STACK)); if (s == NULL) exit(0); s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if (s->base == NULL) exit(0); //s->base = s->top; s->top=s->base; s->size = STACK_INIT_SIZE; return s; } void destoryStack(STACK *s) { free(s->base); free(s); } int push(STACK *s, ElemType *e) { if (s == NULL || e == NULL) return 0; if ((s->top - s->base) >= s->size) { s->base = (ElemType *)realloc(s->base, (s->size + STACK_INCREME_SIZE) * sizeof(ElemType)); if (s == NULL) return 0; s->top = s->base + s->size; s->size = s->size + STACK_INCREME_SIZE; } *s->top = *e; s->top++; //s->top++ = *e return 1; } int pop(STACK *s, ElemType *e) { if (s == NULL || e == NULL) return 0; if (s->top == s->base) return 0; s->top--; *e = *s->top; //*e = *--s->top return 1; } int isEmpty(STACK *s) { return s->base == s->top ? 1 : 0; }
maze.h
/* * maze.h * * Created on: 2012年8月21日 * Author: h */ #ifndef MAZE_H_ #define MAZE_H_ typedef struct { int y, x; } POS; typedef struct { int di; int sno; POS seat; } ElemType; int isPass(POS p, int item[][10]); POS getNext(POS curr, int di); void printMaze(POS curr, int item[][10]); #endif /* MAZE_H_ */
maze.c
/* * maze.c * * Created on: 2012年8月21日 * Author: h */ #include "maze.h" #include <stdlib.h> #include <stdio.h> int isPass(POS p, int item[][10]) { return item[p.y][p.x] == 0 ? 1 : 0; } POS getNext(POS curr, int di) { POS p = curr; switch (di) { case 0: p.x--; break; case 1: p.y++; break; case 2: p.x++; break; case 3: p.y--; break; } return p; } void printMaze(POS curr, int item[][10]) { int i, j; system("cls"); printf("\n"); for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { if (i == curr.y && j == curr.x) { printf("@"); continue; } if (item[i][j] != 0) printf("%d",item[i][j]); else printf(" "); } printf("\n"); } }
main.c
/* * main.c * * Created on: 2012年8月20日 * Author: h */ #include "maze.h" #include "stack.h" #include <stdio.h> #include <stdlib.h> #include <conio.h> static int item[10][10] = { { 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 } }; static const POS inPos = { 1, 1 }, outPOS = { 8, 8 }; //求迷宫出口 int main(int argc, char **argv) { ElemType e; POS currPos = inPos; int step = 1; STACK *s = initStack(); do { if (isPass(currPos, item)) { e.sno = step; e.seat = currPos; e.di = 0; push(s, &e); item[currPos.y][currPos.x] = 2; if (currPos.x == outPOS.x && currPos.y == outPOS.y) { printf("ok!\n"); getch(); break; } step++; printMaze(currPos, item); currPos = getNext(currPos, 0); getch(); } else { pop(s, &e); if (e.di == 4 && !isEmpty(s)) { item[currPos.y][currPos.x] = 3; pop(s, &e); currPos=e.seat; } if (e.di <= 3) { e.di++; push(s, &e); currPos = getNext(e.seat, e.di); } } } while (!isEmpty(s)); return 1; } /* int main(int argc, char **argv) { int num = 1348, temp; STACK *s = initStack(); while (num) { temp = num % 8; push(s, &temp); num /= 8; } printf("the result is \n"); while (!isEmpty(s)) { pop(s, &temp); printf("%d", temp); } printf("\n"); destoryStack(s); return 1; }*/
相关推荐
《用栈解决迷宫问题的实验报告》 一、需求分析 在本次实验中,我们需要设计一个程序来解决迷宫问题。迷宫采用结构体Maze进行表示,其中包括以下关键属性: 1. pos:用于标记该位置是否存在障碍,通常用0表示通路,...
本文将详细介绍如何利用栈这一数据结构来解决迷宫问题,即寻找从迷宫入口到出口的可行路径。 #### 二、基础知识回顾 1. **栈**:栈是一种只能在一端进行插入或删除操作的线性表,其操作遵循先进后出的原则。 2. **...
根据提供的文件信息,本文将详细解释如何利用栈这种数据结构来解决迷宫问题,并通过具体的代码实现进行深入探讨。 ### 栈与迷宫问题 #### 1. 栈的概念 栈是一种特殊的线性表,其特点是只能在一端进行插入或删除...
用栈的思想解决迷宫问题,获得一条通路,迷宫是随机生成的,如果没有通路就显示无法通过
表达式括号匹配配对判断问题,顺序栈的公用问题,迷宫问题
使用栈解决迷宫问题。 迷宫求解是数据结构中一个经典的程序设计题,一般情况下采用的式穷举求解的方法,即从迷宫的入口出发,沿着某一方向前进,若能走通则继续前进,若不通需原路退回后改变方向继续前进,直到找到...
本主题将探讨如何利用栈这一数据结构,用C语言解决迷宫问题。栈是一种后进先出(LIFO)的数据结构,适用于解决回溯问题,如迷宫中的路径寻找。 首先,我们要理解迷宫问题的基本设定:一个二维矩阵代表迷宫,其中1...
迷宫问题最短路径C语言printf("最短路径如下:\n"); printf("长度: %d\n",minlen); printf("路径: "); for(k=0;k;k++) printf("(%d,%d) ",Path[k].i,Path[k].j); printf("\n"); return 0;
栈是一种后进先出(LIFO)的数据结构,非常适合用来解决迷宫问题,因为它可以有效地回溯路径。 首先,我们需要理解迷宫问题的基本设定:一个二维矩阵代表迷宫,其中1表示墙壁,0表示可通行的路径。目标是从起点...
在本文中,我们将深入探讨如何使用C语言,结合链式栈结构和回溯算法来解决迷宫问题,并提供两种不同的输出形式:数组输出和三元组输出。首先,我们需要了解迷宫问题的基本概念。 迷宫问题是一个经典的路径寻找问题...
用栈辅助实现迷宫问题的求解,通过随机数发生器产生迷宫图,程序显示求解步骤
标题中的“migong.rar_migong_数据结构 迷宫_栈的应用_迷宫 栈_迷宫问题”暗示了这是一个关于使用栈解决迷宫问题的案例。迷宫问题通常涉及到寻找从起点到终点的有效路径,而栈在这里起到了记录和回溯路径的作用。 ...
数据结构栈和队列解决迷宫问题 本文档详细介绍了利用栈和队列解决迷宫问题的步骤,对于初学者学习数据结构能很好的进行辅导。本文档主要涉及到数据结构的两个重要概念:栈和队列,并介绍了如何使用这两个数据结构来...
题目如下:利用栈结构实现迷宫求解问题。迷宫求解问题如下: 心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了一块奶酪,...
在本主题中,我们将重点讨论如何利用非递归算法,特别是栈数据结构来解决迷宫问题。 首先,栈是一种后进先出(LIFO)的数据结构,适用于解决需要回溯的问题,例如深度优先搜索(DFS)。在迷宫问题中,我们可以将栈...
这是一个用栈处理问题的例子,它处理的是走迷宫问题。
因此,在求迷宫通路的算法中采用“栈”进行求解。 迷宫构建 为了避免每走一步便需判断是否走出迷宫的麻烦,将所创建的迷宫用 1 包围起来。 位置搜索 每到一处,总让它按上、下、左、右 4 个方向试探下一个位置;...
这可是我自己写的,书上写的可是不对的,于是,我自己摸索写的,还是对的哦。。。