C++深度优先和广度优先的实现
前言
本篇文章为笔者的读书笔记,未经允许请勿转载。如果对你有帮助记得点个赞(●’◡’●)
本文主要讲的深度优先算法和广度优先算法的区别,其中深度优先有两种实现方式,一种是递归法,另一种是非递归(栈实现),而广度优先就是队列的实现;
后面还会以图形表述栈实现和队列实现;且用到了图形库easyx;
源码如下:
main
#include <iostream>
#include<vector>
#include<windows.h>
#include"Draw.h"
#include"DFS.h"
#include"BFS.h"
#include"Search.h"
using namespace std;
vector<vector<int>> map =
{
{
0,0,1,0,1,0,1},
{
1,0,0,0,0,0,1},
{
1,0,1,1,1,0,0},
{
1,0,0,0,1,1,1},
{
0,0,1,0,0,0,1},
{
1,0,1,0,1,0,0},
{
1,0,1,1,1,0,1},
};
//检查数据的合法性
bool check(int x, int y)
{
//所走的路径不能越界,也不能走到地图为1的地方。
if ((y < 0 || x<0) || y >= map.size() ||x>=map[y].size() || map[y][x] == 1)
{
return false;
}
return true;
}
//测试图形库是否能正常运行
void test()
{
Draw draw(600, map);
draw.updata();
}
//深度优先算法
void test1()
{
DFS dfs(check);
Draw draw(600, map);
Pos start{
0,0 };
Pos end{
1,6 };
draw.level[end.y][end.x] = Draw::end;//设置终点位置
draw.updata();
const auto& path = dfs.recursive(start,end);//开始寻路,路径找完后用vector保存了
for (const auto& e : path)
{
draw.level[e.y][e.x] = Draw::visit;//路径设置为visit。注意x,y不要写反了
draw.updata();
Sleep(500)

本文介绍使用C++实现迷宫寻路的两种经典算法——深度优先搜索(DFS)和广度优先搜索(BFS)。文章详细展示了如何利用栈和队列数据结构来实现这两种算法,并通过图形库easyx直观呈现寻路过程。
最低0.47元/天 解锁文章
3197

被折叠的 条评论
为什么被折叠?



