转载于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. c# override用法

    要扩展或修改继承的方法.属性.索引器或事件的抽象实现或虚实现,必须使用 override 修饰符. 在此例中,类 Square 必须提供 Area 的重写实现,因为 Area 是从抽象的 Shapes ...

  2. 好用的在线画图工具processon

    ProcessOn是一款基于SaaS的前沿.高效线上作图工具,它将Visio.Xmind等专业作图工具搬到了"云端" 注册链接:https://www.processon.com/ ...

  3. STM32F0_HAL库驱动描述——HAL驱动程序概述

    HAL库文件结构: HAL驱动文件: 外设驱动API文件和头文件:包含了常见主要的通用API,其中ppp表示外设名称,如adc.usart.gpio.irda等: stm32f0xx_hal_ppp. ...

  4. samba搭建与配置说明

    1. 环境检查getenforce 检查selinux service iptables stop 2.安装samba yum -y install samba 3.配置samba /etc/samb ...

  5. mvc区分页面内请求判断是否是Html.action或Html.RenderAction请求

    ControllerContext.IsChildAction 来判断,如果用Html.Action或Html.RenderAction方法,这个属性返回true,否则返回false

  6. vim 复制大块内容。 y,p(是单个y,而不是yy)

    vim 复制大块内容. y,p(是单个y,而不是yy)

  7. [Windows无法连接到 System Event Notification Service服务]解决方案

    我之前使用Windows的过程的有出现过以下问题,之前因为比较急就匆忙解决了没来得及把解决方法写下来. 正好今天有个朋友电脑也出现此问题过来找我寻求解决方法,便把解决方法写了下来. 电脑出现的问题,如 ...

  8. 线程锁,threadinglocal,线程池,生产者消费者模型

    1.线程锁 1.锁Lock(只能锁一次) import threading import time v = [] lock = threading.Lock() def func(arg): lock ...

  9. Python_Day1_人人都爱列表

    列表由一系列按特定顺序排列的元素组成.你可以创建包含字母表中所有字母.数字0~9或 所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系. 鉴于列表通常包含多个元素,给列 ...

  10. linux初学者-虚拟机管理篇

    linux初学者-虚拟机管理篇 之前已经介绍过,在linux系统的学习中,一般需要在虚拟机中进行操作,但是虚拟机是如何安装的呢?又是如何管理的呢?下文将对虚拟机的安装和管理进行一个简要的介绍. 1.虚 ...