DFS:

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

#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=100;
bool vst[maxn][maxn]; //访问标记
int map[maxn][maxn]; //坐标范围
int dir[4][2]={0,1,0,-1,1,0,-1,0}; //方向向量,(x,y)周围的四个方向
bool CheckEdge(intx,int y) //边界条件和约束条件的判断
{
if(!vst[x][y]&&...) //满足条件
return 1;
else // 与约束条件冲突
return 0;
} void dfs(int x,int y)
{
vst[x][y]=1; //标记该节点被访问过 if(map[x][y]==G) //出现目标态G
{
...... //做相应处理 return;
}
for(int i=0;i<4;i++)
{
if(CheckEdge(x+dir[i][0],y+dir[i][1])) //按照规则生成下一个节点
dfs(x+dir[i][0],y+dir[i][1]);
}
return;//没有下层搜索节点,回溯
}
int main()
{
......
return 0;
}

BFS:

该框架是2D坐标范围内做BFS设计的,使用STL实现

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=100;
bool vst[maxn][maxn]; //访问标记
int dir[4][2]={0,1,0,-1,1,0,-1,0}; //方向向量
struct State //BFS 队列中的状态数据结构
{
int x,y; //坐标位置
int Step_Counter; //搜索步数统计器
};
State a[maxn];
bool CheckState(State s) //约束条件检验
{
if(!vst[s.x][s.y]&&...) //满足条件
return 1;
else //约束条件冲突
return 0;
}
void bfs(State st)
{
queue<State>q; //BFS队列
State now,next; //定义2个状态,当前和下一个
st.Step_Counter=0; //计数器清零
q.push(st); //入队
vst[st.x][st.y]=1; //访问标记
while(!q.empty())
{
now=q.front(); //取队首元素进行扩展
if(now==G) //出现目标态,此时为Step_Counter的最小值,可以退出即可
{
...... //做相关处理
return;
}
for(int i=0;i<4;i++)
{
next.x=now.x+dir[i][0]; //按照规则生成下一个状态
next.y=now.y+dir[i][1];
next.Step_Counter=now.Step_Counter+1; //计数器加1
if(CheckState(next)) //如果状态满足约束条件则入队
{
q.push(next);
vst[next.x][next.y]=1; //访问标记
}
}
q.pop(); //队首元素出队
}

DFS和BFS模板的更多相关文章

  1. 图的遍历——DFS和BFS模板(一般的图)

    关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostrea ...

  2. dfs與bfs常用模板

    基本遍歷: //dfs void dfs(int x) { v[x]=1; for(int i=head[x];i;i=next[i]) { int y=ver[i]; if(v[y]) contin ...

  3. 邻接矩阵实现图的存储,DFS,BFS遍历

    图的遍历一般由两者方式:深度优先搜索(DFS),广度优先搜索(BFS),深度优先就是先访问完最深层次的数据元素,而BFS其实就是层次遍历,每一层每一层的遍历. 1.深度优先搜索(DFS) 我一贯习惯有 ...

  4. BFS (1)算法模板 看是否需要分层 (2)拓扑排序——检测编译时的循环依赖 制定有依赖关系的任务的执行顺序 djkstra无非是将bfs模板中的deque修改为heapq

    BFS模板,记住这5个: (1)针对树的BFS 1.1 无需分层遍历 from collections import deque def levelOrderTree(root): if not ro ...

  5. 图的DFS与BFS

    图的DFS与BFS(C++) 概述 大一学生,作为我的第一篇Blog,准备记录一下图的基本操作:图的创建与遍历.请大佬多多包涵勿喷. 图可以采用邻接表,邻接矩阵,十字链表等多种储存结构进行储存,这里为 ...

  6. 回溯剪枝,dfs,bfs

    dfs: 给定一个整数n,将数字1~n排成一排,将会有很多种排列方法. 现在,请你按照字典序将所有的排列方法输出. 输入格式 共一行,包含一个整数n. 输出格式 按字典序输出所有排列方案,每个方案占一 ...

  7. Clone Graph leetcode java(DFS and BFS 基础)

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  8. 数据结构(12) -- 图的邻接矩阵的DFS和BFS

    //////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...

  9. 数据结构(11) -- 邻接表存储图的DFS和BFS

    /////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...

随机推荐

  1. 使用图像扫描控件ScanOnWeb实现在线图像扫描

    今天上网查资料,看到一篇文章,描述的是一个开发OA软件的公司解决浏览器嵌入式扫描仪编程的文章,文章描述了改OA厂商的工程师如何辛苦的克服了各种技术难题,最终实现了在线图像扫描处理,然后又在无数个不眠的 ...

  2. maven生命周期和依赖的范围

    转载:http://blog.csdn.net/J080624/article/details/54692444 什么是依赖? 当 A.jar 包用到了 B.jar 包时,A就对B产生了依赖: 在项目 ...

  3. 【转】ubuntu 下安装mongodb php 拓展的方法

    按照上面的方法安装成功之后,写一个 mongodb 的php测试脚本,用来测试是否可以 正确连接上mongodb ,并查询结果. 参考:http://php.net/manual/en/class.m ...

  4. springMVC4(16)拦截器解析与登陆拦截模拟

    在SpringMVC中,我们会常常使用到拦截器,尽管SpringAOP也能帮我们实现强大的拦截器功能,但在Web资源供给上.却没有SpringMVC来得方便快捷. 使用SpringMVC拦截器的核心应 ...

  5. 【转载】企业服务总线Enterprise service bus介绍

    企业服务总线(Enterprise service bus). 以往企业已经实现了很多服务, 构成了面向服务的架构,也就是我们常说的SOA. 服务的参与双方都必须建立1对1 的联系,让我们回顾一下SO ...

  6. 怎样将查询到的数据显示在DataGridView中

    背景介绍: 数据库中的T_Line_Info表中存放着学生上机的记录,也就是我们须要查询上机记录的表.当中详细内容为: 界面设计例如以下: watermark/2/text/aHR0cDovL2Jsb ...

  7. cygwin安装sshd服务(win7)Error installing a service: OpenSCManager: Win32 error 5:

    Error installing a service: OpenSCManager: Win32 error 5:           出现这个问题的解决办法:win7系统管理员运行Cygwin软件 ...

  8. Rod Johnson

    Spring Framework创始人,著名作者. Rod在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位.更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位. 有着相当丰富的C/C ...

  9. POJ3694 Network —— 边双联通分量 + 缩点 + LCA + 并查集

    题目链接:https://vjudge.net/problem/POJ-3694 A network administrator manages a large network. The networ ...

  10. go string []byte相互转换

    string 不能直接和byte数组转换 string可以和byte的切片转换 1,string 转为[]byte var str string = "test" var data ...