#头文件

//Stack.h
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdlib.h>
#include"Maze.h"
#define MAX 100
typedef struct Position  DataType;
typedef struct Stack
{int top;DataType stack[MAX];
}Stack;void StackInit(Stack* s);
void StackPush(Stack* s, DataType data);
void StackPop(Stack* s);
DataType GetStackTop(Stack*s);
int GetStackSize(Stack*s);
int StackEmpty(Stack *s);
#pragma once
//Maze.h
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define ROW 6
#define COL 6
typedef struct Maze
{int _map[ROW][COL];
}Maze;
typedef struct Position
{int _x;int _y;
}Position;// 初始化迷宫
void InitMaze(Maze* m, int map[ROW][COL]);// 打印迷宫
void PrintMaze(Maze* m);// 检测是否为有效入口
int IsValidEnter(Maze* m, Position enter);// pos 必须在地图中 pos位置如果是1
int IsPass(Maze* m, Position pos);// 检测是否在出口的位置
int IsExit(Position pos, Position enter);// 走迷宫
void PassMaze(Maze* m, Position enter);

#操作函数

//Stack.c
#include"Stack.h"
void StackInit(Stack* s)
{s->top = 0;
}
void StackPush(Stack* s, DataType data)
{if (s->top == MAX){printf("栈已满!无法入栈元素\n");return;}(s->top)++;s->stack[s->top] = data;
}
void StackPop(Stack *s)
{if (s->top == 0){printf("栈为空,无法出栈元素\n");return;}(s->top)--;
}
DataType GetStackTop (Stack*s)
{if (s->top == 0){printf("栈为空,无法获取栈顶\n");}return s->stack[s->top];
}
int GetStackSize(Stack*s)
{return s->top;
}
int StackEmpty(Stack *s)
{if (s->top == 0){return 1;}else{return 0;}
}
//Maze.c
#include"Maze.h"
#include"Stack.h"
void InitMaze(Maze * m, int map[ROW][COL])
{int i = 0;int j = 0;assert(m);for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){m->_map[i][j] = map[i][j];}}
}
void PrintMaze(Maze* m)
{assert(m);int i = 0;int j = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){printf(" %d ", m->_map[i][j]);}printf("\n");}
}
int IsValidEnter(Maze* m, Position enter)
{assert(m);if (enter._x == ROW - 1 || enter._x == 0 || enter._y == COL - 1 || enter._y == 0){return 1;}elsereturn 0;
}
// pos 必须在地图中 pos位置如果是1
int IsPass(Maze* m, Position pos)
{assert(m);if (pos._x >= ROW || pos._x < 0 || pos._y >= COL || pos._y >= COL){return 0;}else if (m->_map[pos._x][pos._y] != 1){return 0;}elsereturn 1;
}
// 检测是否在出口的位置
int IsExit(Position pos, Position enter)
{if ((pos._x == ROW - 1 || pos._x == 0 || pos._y == COL - 1 || pos._y == 0) && ((pos._x != enter._x) || (pos._y) != enter._y)){return 1;}return 0;
}
void PassMaze(Maze* m, Position enter)
{Stack s;Position cur, next;if (!IsValidEnter(m, enter)){printf("没有入口!\n");return;}StackInit(&s);StackPush(&s, enter);while (!StackEmpty(&s)){cur = GetStackTop(&s);if (IsExit(cur, enter)){return;}m->_map[cur._x][cur._y] = 2;next = cur;next._x = next._x - 1;if (IsPass(m, next)){StackPush(&s, next);continue;}next._y = next._y - 1;if (IsPass(m, next)){StackPush(&s, next);continue;}next._y = next._y + 1;if (IsPass(m, next)){StackPush(&s, next);continue;}next._x = next._x + 1;if (IsPass(m, next)){StackPush(&s, next);continue;}//cur 四个方向都走不通;m->_map[cur._x][cur._y] = 3;StackPop(&s);}
}

#验证操作

//test.c
#include "Maze.h"
#include "Stack.h"
int main()
{int map[ROW][COL] ={{ 0,0,0,0,0,0 },{ 0,0,1,0,0,0 },{ 0,0,1,0,0,0 },{ 0,0,1,1,1,0 },{ 0,0,1,0,1,1 },{ 0,0,1,0,0,0 }};Maze m;InitMaze(&m, map);Position enter;enter._x = 5;enter._y = 2;PrintMaze(&m);PassMaze(&m, enter);printf("\n");PrintMaze(&m);system("pause");return 0;
}

迷宫问题求解(1) 简单迷宫相关推荐

  1. 栈应用之简单迷宫问题(C语言版)

    迷宫在这儿--–>(用二维数组实现) 栈的应用有很多,前面解决了括号问题和后缀表达式问题,迷宫便可以解决了!! 迷宫的解题思路有点绕,并且其栈的结构也有所改变!但是本次解决迷宫仍然用的普通的栈 ...

  2. 数据结构之迷宫问题求解(一)利用栈与递归求解出口

    本文适合于对迷宫问题已有初步研究,或阅读代码能力较强的人. 因此,如果你对迷宫问题一无所知,请参考其他更详细的资料. 迷宫问题,是一个对栈(Stack)典型应用的例子之一. 假如,有如下10X10的迷 ...

  3. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  4. C语言项目————1、迷宫问题求解

    无意中发现了一个巨牛巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,小白也能学,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家 ...

  5. C++进行迷宫问题求解

    利用栈和队列两种数据结构实现迷宫求解 一. 迷宫问题的描述 二. 迷宫问题求解 1.使用队列进行广度优先搜索 C++代码实现 2. 使用栈进行深度优先搜索 C++代码实现 3.代码运行结果 三.迷宫问 ...

  6. 如何使用C语言实现简单迷宫(递归和非递归实现 含图例)

    1.非递归实现 简单迷宫:只有一条通路的迷宫 思路:在找迷宫通路的时候,我们往往是在给定入口(入口合法且为通路)的情况下,沿着入口的某个方向走(此方向是通路).现给定走迷宫的方向:上.左.右.下,即优 ...

  7. 简单迷宫,字符化输出

    简单迷宫,字符化输出 效果图 #include <stdio.h> #include <stdlib.h> #define M 8 #define N 8 #define TR ...

  8. C语言 迷宫问题求解(顺序栈应用示例)

    [cpp] view plaincopy //顺序栈的应用:迷宫 //作者:nuaazdh //时间:2011年12月7日 #include <stdio.h> #include < ...

  9. 基于JAVA的简单迷宫游戏

    一.实验要求 1. 迷宫游戏是非常经典的游戏,在该题中要求随机生成一个迷宫,并求解迷宫. 2. 要求游戏支持玩家走迷宫,和系统走迷宫路径两种模式.玩家走迷宫,通过键盘方向键控制,并在行走路径上留下痕迹 ...

  10. java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画

    前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...

最新文章

  1. ASP.NET中分步骤向导组件Wizard组件的使用
  2. jspservlet初体验——用户登录功能实现
  3. android过滤html标签,Android中处理TextView带超链接HTML标签的点击事件处理方法
  4. Linux笔记-bash批量启动、停止、重启、查询状态指定Java进程(其他进行通用)
  5. Webservice接口
  6. 8.python之面相对象part.6(反射__call__,__setattr__,__delattr__,__getattr__)
  7. python utf编码 查询_python数据库查询中文乱码
  8. 桂林老兵站ASP木马
  9. c语言常用图形函数库,easyx安装过程及c语言常用图形库函数全解.ppt
  10. 计算机excel还原,Excel文件恢复软件(Magic Excel Recovery)
  11. 联想V470 安装win7系统 经验
  12. 写给过得很辛苦很迷茫的你~一定要看啊
  13. 2017又是新的一年
  14. PAT A1038 Recover the Smallest Number ——醉里挑灯看剑
  15. 利用xpath数据解析爬取百度新闻热榜
  16. VB 清除数组中全部元素的值
  17. github上的python项目 运行,12月Github上热门的Python开源项目
  18. LaTex如何自动生成参考文献
  19. 虚拟主机怎么搭建网站(如何搭建自己虚拟主机)
  20. 安卓IMS 原理解析(二、IMS之InputReader事件获取)

热门文章

  1. 充电器电压和电池电压关系
  2. 红米10a和红米9a哪个好 红米10a和红米9a的区别
  3. MySQL必知必会2
  4. 如何使用idea生成Doc文档
  5. canal.admin、adapter和deployer的区别
  6. windows服务器直播推流
  7. pwr | 谁说样本量计算是个老大难问题!?(二)(独立样本均值篇)
  8. 雨中拍照:廉价好用的自制伞架
  9. java Excel 从第三行开始读取怎么设置
  10. css文字长度实现宽度自适应、显示三行超出省略号