C++深度优先和广度优先的实现

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


前言

本篇文章为笔者的读书笔记,未经允许请勿转载。如果对你有帮助记得点个赞(●’◡’●)
本文主要讲的深度优先算法和广度优先算法的区别,其中深度优先有两种实现方式,一种是递归法,另一种是非递归(栈实现),而广度优先就是队列的实现;
后面还会以图形表述栈实现和队列实现;且用到了图形库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)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值