转载于https://blog.csdn.net/alalalalalqp/article/details/9155419

BFS模板:

#include<cstdio>

#include<cstring>

#include<queue>

#include<algorithm>

using namespace std;

const int maxn=;

bool vst[maxn][maxn]; // 访问标记

int dir[][]={,,,-,,,-,}; // 方向向量

struct State // BFS 队列中的状态数据结构

{

    int x,y; // 坐标位置

    int Step_Counter; // 搜索步数统计器

};

State a[maxn];

boolCheckState(State s) // 约束条件检验

{

    if(!vst[s.x][s.y] && ...) // 满足条件        

        return ;

    else // 约束条件冲突

    return ;

}

void bfs(State st)

{

    queue <State> q; // BFS 队列

    State now,next; // 定义2 个状态,当前和下一个

    st.Step_Counter=; // 计数器清零

    q.push(st); // 入队    

    vst[st.x][st.y]=; // 访问标记

    while(!q.empty())

    {

        now=q.front(); // 取队首元素进行扩展

        if(now==G) // 出现目标态,此时为Step_Counter 的最小值,可以退出即可

        {

            ...... // 做相关处理

            return;

        }

    for(int i=;i<;i++)

    {

        next.x=now.x+dir[i][]; // 按照规则生成    下一个状态

        next.y=now.y+dir[i][];

        next.Step_Counter=now.Step_Counter+; // 计数器加1

        if(CheckState(next)) // 如果状态满足约束条件则入队

        {

            q.push(next);

            vst[next.x][next.y]=; //访问标记

        }

    }

    q.pop(); // 队首元素出队

    }

 return;

}

int main()

{

......

 return ;

}

DFS模板:

DFS:

/*

该DFS 框架以2D 坐标范围为例,来体现DFS 算法的实现思想。

*/

#include<cstdio>

#include<cstring>

#include<cstdlib>

using namespace std;

const int maxn=;

bool vst[maxn][maxn]; // 访问标记

int map[maxn][maxn]; // 坐标范围

int dir[][]={,,,-,,,-,}; // 方向向量,(x,y)周围的四个方向

bool CheckEdge(int x,int y) // 边界条件和约束条件的判断

{

    if(!vst[x][y] && ...) // 满足条件

        return ;

    else // 与约束条件冲突

        return ;

}

void dfs(int x,int y)

{

    vst[x][y]=; // 标记该节点被访问过

    if(map[x][y]==G) // 出现目标态G

        {

        ...... // 做相应处理

        return;

        }

    for(int i=;i<;i++)

    {

        if(CheckEdge(x+dir[i][],y+dir[i][])) // 按照规则生成下一个节点

            dfs(x+dir[i][],y+dir[i][]);

    }

    return; // 没有下层搜索节点,回溯

}

int main()

{

......

return ;

}

自用,侵删。

BFS DFS模板的更多相关文章

  1. BFS与DFS模板

    搜索问题的解法 DFS(深度优先搜索) BFS(广度优先搜索) backtracking(回溯) DFS模板 void dfs(...) { // 结束递归的条件 if (...) { ..... / ...

  2. nyoj 27-水池数目(BFS, DFS)

    27-水池数目 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 南阳理工学院校园里有一些小河和一些湖泊,现在,我 ...

  3. 匈牙利算法dfs模板 [二分图][二分图最大匹配]

    最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs 于是用到了dfs模板 寻找二分图最大匹配的算法是匈牙利算法 匈牙利算法的主要程序是寻找增广路 寻找增光路是过程是:从一个未经配对 ...

  4. LeetCode:BFS/DFS

    BFS/DFS 在树专题和回溯算法中其实已经涉及到了BFS和DFS算法,这里单独提出再进一步学习一下 BFS 广度优先遍历 Breadth-First-Search 这部分的内容也主要是学习了labu ...

  5. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  6. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  7. Collect More Jewels(hdu1044)(BFS+DFS)

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. Cleaning Robot (bfs+dfs)

    Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...

  9. DFS模板

    DFS模板 题型分类:我们可以将DFS题分为两大类: 1 . 地图型:这种题型将地图输入,要求完成一定的任务.因为地图的存在.使得题意清楚形象化,容易理清搜索思路.AOJ 869-迷宫(遍历地图,四向 ...

随机推荐

  1. 如何取得Spring管理的bean

    本文主要讲3中实现方式,请用第3种方法(通用) 1.servlet方式加载时配置如下 <servlet> <servlet-name>springMVC</servlet ...

  2. EF 使用遇到过的错误记录备忘

    1. is only supported for sorted input in LINQ to Entities  The method :只支持排序输入实体LINQ 的方法 是使用skip()时没 ...

  3. git分支创建与切换

    1. 场景描述 新版本迭代上线完成,为了保持当前版本稳定性及可回退等需求,需要切换新的分支用于下一版本的迭代开发. 2. 解决方案 2.1 切换前工作. 因发布上线当天有可能存在临时更改文件而未上传g ...

  4. mysql语句优化原则

    有时候发现数据量大的时候查询起来效率就比较慢了,学习一下mysql语句优化的原则,自己在正常写sql的时候还没注意到这些,先记录下来,慢慢一点一点的学,加油! 这几篇博客写的都可以: https:// ...

  5. pytorch实现yolov3(5) 实现端到端的目标检测

    torch实现yolov3(1) torch实现yolov3(2) torch实现yolov3(3) torch实现yolov3(4) 前面4篇已经实现了network的forward,并且将netw ...

  6. Mask-RCNN:教你如何制作自己的数据集进行像素级的目标检测

    概述 Mask-RCNN,是一个处于像素级别的目标检测手段.目标检测的发展主要历程大概是:RCNN,Fast-RCNN,Fster-RCNN,Darknet,YOLO,YOLOv2,YOLO3(参考目 ...

  7. 找到linux中当前java的安装位置

    先看java -version $java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111 ...

  8. springBean生命周期----来自spring实战总结

    1.Spring对bean进行实例化 2.Spring将值和bean的引用注入到bean对应的属性中(比如说注入到被依赖的bean的方法中或属性里) 3.如果bean实现了BeanNameAware接 ...

  9. CentOS下搭建Git服务器(基于SSH协议)

    1,安装Git所需依赖包      # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel      # ...

  10. Visual Studio 调试(系列文章)

    调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...