关于c++的D F S和B F S

我只是想要一下这两个的模板代码(c++的)
网上的看不大懂,所以来问一下各位;
然后BFS的模板最好加上一点注释,不然我可能会看的有点蒙


BFS算法:

通常用队列(先进先出,FIFO)实现

初始化队列Q;
Q = {起点s};
标记s为已访问;
while(Q非空)
{
    取Q队首元素u;
    u出队;
    if(u==目标状态)
    {
        ……
    }
    else
    {
        所有与u相邻且未被访问的点进入队列;
        标记u为已访问;
    }
}
//BFS算法框架
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;

const int maxn = 100;
bool mark[maxn][maxn]; //访问标记
int go[4][2] = {0,-1,1,0,0,1,-1,0}; //方向向量

struct State
{
    int x,y; //坐标位置
    int step; //搜索步数记录
};

State maze[maxn];

bool CheckState(State s)
{
    if(!mark[s.x][s.y]&&(边界条件满足)) //符合条件
        return 1;
    else //不符合条件
        return 0;
}

void BFS(State st)
{
    queue<State> q;
    State now,next;
    st.step = 0; //步数清零;
    q.push(st); //入队;
    mark[st.x][st.y] = 1; //访问标记
    while(!q.empty())
    {
        now = q.front(); //取队首元素进行拓展
        q.pop(); //队首元素出队;
        if(now == 目标状态) //出现目标状态,此时的step为最小值,做做相关处理后退出即可;
        {
            ……;
            return ;
        }
        //如果没有到目标状态:
        else
        {
            for(int i=0;i<4;i++)
            {
                next.x = now.x + go[i][0];//按照规则生成下一个状态
                next.y = now.y + go[i][1];
                if(CheckState(next)) //如果状态满足条件则入队;
                {
                    next.step = now.step + 1;
                    q.push(next);
                }
            }
        }
        return ;
    }
}

int main()
{
    ……;
    BFS();
    ……;
    return 0;
}