障碍寻路算法c语言,C++ DFS算法实现走迷宫自动寻路

C++ DFS算法实现走迷宫自动寻路,供大家参考,具体内容如下

深度优先搜索百度百科解释:

事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.

运行效果:

ed14c45fabb2a1cd01377e53a95bd02f.png

d9f8a60f38346a1fafe679abcdb03e07.png

说明:

深度优先搜索算法是在我在图的部分接触到的,后来才发现它也可以不用在图的遍历上,它是一个独立的算法,它也可以直接用在一个二维数组上。

其算法原理和实现步骤在代码中已经有了很好的体现了,这里就不再赘述。

在程序中实现了手动操控走迷宫和自动走迷宫两种模式,并且可在自动走完迷宫后显示行走的路径。

如果要修改程序使用的迷宫地图只需要修改map二维地图数组和两个地图宽高的常量值即可。同样可以使用自动走迷宫的模式。

理论上这种算法可以对任意大小任意复杂的迷宫搜索路径,但是因为这种算法是用递归实现的,占用空间较大,地图大小增大也会多使用很多的空间,受限于堆栈空间的限制我在把地图大小增加到2020的时候运行自动寻路模式就会报堆栈溢出异常了。我在代码准备了1818和15*15的两个迷宫地图二维数组用于测试。

编译环境:

Windows VS2019

代码:

Game.h 游戏类

#pragma once

#include

#include

#include

#include

#include

using namespace std;

//地图宽高常量

constexpr unsigned int mapWidth = 18;

constexpr unsigned int mapHeight = 18;

//游戏类

class Game

{

private:

map cCMAEMap; //地图数组元素对应字符

map movDistanceMap; //按键对应移动距离

int px, py; //玩家坐标

int dArr[4][2] = { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; //数值和移动方向对应数组

vector tempPathVec; //路径向量

vector> allPathVec;//存储所有路径向量

//检查参数位置是否可走

bool check(int x, int y, int(*map)[mapWidth])

{

//判断修改后的玩家坐标是否越界、修改后的玩家坐标位置是否可走

if (x < 0 || x >= mapWidth || y < 0 || y >= mapHeight || (map[y][x] != 0 && map[y][x] != 3))

return false;

return true;

}

//控制玩家移动函数

bool controlMove (int(*map)[mapWidth])

{

//键盘按下时

if (!_kbhit()) return false;

char key = _getch();

if (key != 'w' && key != 's' && key != 'a' && key != 'd')

ret

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值