迷宫问题求解(1) 简单迷宫
#头文件
//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) 简单迷宫相关推荐
- 栈应用之简单迷宫问题(C语言版)
迷宫在这儿--–>(用二维数组实现) 栈的应用有很多,前面解决了括号问题和后缀表达式问题,迷宫便可以解决了!! 迷宫的解题思路有点绕,并且其栈的结构也有所改变!但是本次解决迷宫仍然用的普通的栈 ...
- 数据结构之迷宫问题求解(一)利用栈与递归求解出口
本文适合于对迷宫问题已有初步研究,或阅读代码能力较强的人. 因此,如果你对迷宫问题一无所知,请参考其他更详细的资料. 迷宫问题,是一个对栈(Stack)典型应用的例子之一. 假如,有如下10X10的迷 ...
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置
RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...
- C语言项目————1、迷宫问题求解
无意中发现了一个巨牛巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,小白也能学,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家 ...
- C++进行迷宫问题求解
利用栈和队列两种数据结构实现迷宫求解 一. 迷宫问题的描述 二. 迷宫问题求解 1.使用队列进行广度优先搜索 C++代码实现 2. 使用栈进行深度优先搜索 C++代码实现 3.代码运行结果 三.迷宫问 ...
- 如何使用C语言实现简单迷宫(递归和非递归实现 含图例)
1.非递归实现 简单迷宫:只有一条通路的迷宫 思路:在找迷宫通路的时候,我们往往是在给定入口(入口合法且为通路)的情况下,沿着入口的某个方向走(此方向是通路).现给定走迷宫的方向:上.左.右.下,即优 ...
- 简单迷宫,字符化输出
简单迷宫,字符化输出 效果图 #include <stdio.h> #include <stdlib.h> #define M 8 #define N 8 #define TR ...
- C语言 迷宫问题求解(顺序栈应用示例)
[cpp] view plaincopy //顺序栈的应用:迷宫 //作者:nuaazdh //时间:2011年12月7日 #include <stdio.h> #include < ...
- 基于JAVA的简单迷宫游戏
一.实验要求 1. 迷宫游戏是非常经典的游戏,在该题中要求随机生成一个迷宫,并求解迷宫. 2. 要求游戏支持玩家走迷宫,和系统走迷宫路径两种模式.玩家走迷宫,通过键盘方向键控制,并在行走路径上留下痕迹 ...
- java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画
前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...
最新文章
- ASP.NET中分步骤向导组件Wizard组件的使用
- jspservlet初体验——用户登录功能实现
- android过滤html标签,Android中处理TextView带超链接HTML标签的点击事件处理方法
- Linux笔记-bash批量启动、停止、重启、查询状态指定Java进程(其他进行通用)
- Webservice接口
- 8.python之面相对象part.6(反射__call__,__setattr__,__delattr__,__getattr__)
- python utf编码 查询_python数据库查询中文乱码
- 桂林老兵站ASP木马
- c语言常用图形函数库,easyx安装过程及c语言常用图形库函数全解.ppt
- 计算机excel还原,Excel文件恢复软件(Magic Excel Recovery)
- 联想V470 安装win7系统 经验
- 写给过得很辛苦很迷茫的你~一定要看啊
- 2017又是新的一年
- PAT A1038 Recover the Smallest Number ——醉里挑灯看剑
- 利用xpath数据解析爬取百度新闻热榜
- VB 清除数组中全部元素的值
- github上的python项目 运行,12月Github上热门的Python开源项目
- LaTex如何自动生成参考文献
- 虚拟主机怎么搭建网站(如何搭建自己虚拟主机)
- 安卓IMS 原理解析(二、IMS之InputReader事件获取)