BFS(Breadth_First_Search)

DFS(Depth_First_Search)

拿图来说

BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4,2与3也相连,然而3已经被找到了,跳过;搜3,3与5相连,找到了5;搜4,4与5相连,5已经被找到了,跳过,4与6相连,找到了6;5,6没有连其他点,结束;

DFS过程:以1为根节点,1与2,3相连;搜2,2与3,4相连;搜3,3与5相连;搜5,5没有与其他边相连,返回到3,3没有与其他边相连,返回到2;2还与4相连;搜4,4与5,6相连,5已经被找到了;搜6,6没有与其他点相连,返回到4,4已经搜完了,返回到2,2已经被搜完了,返回到1;1还与3相连,3已经被搜过了,结束!

BFS是一层一层的搜,DFS是一直搜到底,直到不能搜为止,再一层一层的递归

存图方式:

1:可以用二维数组来存,当需要存的数据太大的话,就不能用了,不过有些题也是可以用的

int edge[][];
cin<<a<<b;
edge[a][b]=;

2:可以用邻接链表来写,一般用vector

vector<int>edge[];
cin<<a<<b;
edge[a].push_back(b);

3:  链式前向星(等复习到这的时候再来补充吧)

具体过程代码

BFS

 #include<queue>
#include<vector>
#include<cstdio>
using namespace std;
bool vis[]
void BFS()
{
queue<int>q;
memset(vis,,sizeof(vis));//先将所有节点初始化,还没有访问过
vis[root]=;//找一个根节点,标记为1
q.push(a);//把该元素压入队列
while(!q.empty())
{
u=q.front();//取队列的首元素
q.pop();//首元素出队
for(int i=;i<edge[u].size();i++)
{
if(vis[edge[u][i]]==)//如果该点没有被访问过
{
vis[edge[u][i]]=;//表示该点已经访问过
q.push(edge[u][i]);//入队
}
}
}
}
int main()
{
vector<int>edge[];
cin<<a<<b;
edge[a].push_back(b);//输入所有边
BFS();//进行搜索
}

感觉像是,先找到根节点,入队,出队,再让与之相连的点入队,再是出队,让与之相连的点出队,重复这个过程,直到队列为空

DFS

DFS用递归实现

 vis[];
void DFS(int u)
{
vis[i]=;
for(int i=;i<edge[u].size();i++)
{
if(vis[edge[u][i]]==)
{ DFS(edge[u][i]);
}
}
}
int main()
{
memset(vis,,sizeof(vis));
}

ACM__搜素之BFS与DFS的更多相关文章

  1. PAT Advanced 1076 Forwards on Weibo (30) [图的遍历,BFS,DFS]

    题目 Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and ...

  2. HDU 1226 超级密码 (搜素)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...

  3. 算法录 之 BFS和DFS

    说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...

  4. 通俗理解BFS和DFS,附基本模板

    1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...

  5. 题解报告:poj 1426 Find The Multiple(bfs、dfs)

    Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...

  6. 算法基础:BFS和DFS的直观解释

    算法基础:BFS和DFS的直观解释 https://cuijiahua.com/blog/2018/01/alogrithm_10.html 一.前言 我们首次接触 BFS 和 DFS 时,应该是在数 ...

  7. HDU-4607 Park Visit bfs | DP | dfs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...

  8. BFS和DFS详解

    BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...

  9. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

随机推荐

  1. echo() print() printf() print_r() 的区别

    echo是一个语言结构而非函数,因此它无法被变量函数调用, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print()    只能打印出简单类型变量的值(如int ...

  2. xgboost的sklearn接口和原生接口参数详细说明及调参指点

    from xgboost import XGBClassifier XGBClassifier(max_depth=3,learning_rate=0.1,n_estimators=100,silen ...

  3. Jsp九大内置对象和4大作用域

    一.在java开发中,jsp提供了9个内置的对象,这些内置对象将由容器为用户进行实例化,用户直接使用. 这9个内置对象分别为:pageContext,request,response,session, ...

  4. 第10课 std::bind和std::function(1)_可调用对象

    1. 几种可调用对象(Callable Objects) (1)普通函数指针或类成员的函数指针 (2)具有operator()成员函数的类对象(仿函数).如c++11中的std::function类模 ...

  5. Django中的路由系统:urls

    Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用 ...

  6. Spring 配置 Annotation <context:annotation-config> 和 <context:component-scan>标签的诠释及区别

    Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别 <cont ...

  7. 转)mybatis实战教程(mybatis in action),mybatis入门到精通

    mybatis实战教程(mybatis in action),mybatis入门到精通 http://limingnihao.iteye.com/blog/781671 http://blog.csd ...

  8. canvas实现刮刮乐

    效果展示 源码下载

  9. CentOS7自定义安装git

    1. 介绍 使用Coding管理项目,上面要求使用的git版本为1.8.0以上,而很多yum源上自动安装的git版本为1.7,所以需要掌握手动编译安装git方法. 2. 安装git依赖包yum ins ...

  10. rsyncd

    rsync是一个快速.通用的文件复制工具.支持两种工作模式:基于shell的传输.基于服务的传输.1.配置文件 rsyncd.conf文件由模块及其参数构成.模块由方括号包裹模块名称,直到下一个模块结 ...