ACM__搜素之BFS与DFS
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的更多相关文章
- 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 ...
- HDU 1226 超级密码 (搜素)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...
- 算法录 之 BFS和DFS
说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...
- 通俗理解BFS和DFS,附基本模板
1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...
- 题解报告: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 ...
- 算法基础:BFS和DFS的直观解释
算法基础:BFS和DFS的直观解释 https://cuijiahua.com/blog/2018/01/alogrithm_10.html 一.前言 我们首次接触 BFS 和 DFS 时,应该是在数 ...
- HDU-4607 Park Visit bfs | DP | dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...
- BFS和DFS详解
BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...
- 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 ...
随机推荐
- 得到body相对定位的插件
相对body定位的插件 function offset(ele){ //该元素到父级水平定位的距离 var le=ele.offsetLeft; //该元素到父级垂直定位的距离 var to=ele. ...
- php的基本内容
php是一门后台语言,不能直接用浏览器打开,浏览器是他的载体, php的环境时apache,我们现在用的时phpstudy的继承环境,文件目录应放在apache中的www的根目录下: js的环境为no ...
- 非ECS阿里云安装插件,给阿里云云监控平台
linux的init学习: https://blog.csdn.net/kunkliu/article/details/80942279 阿里云官方文档: https://help.aliyun.co ...
- centos 7安装搜狗输入法
1.安装alien依赖软件 sudo yum install alien -y 2.安装依赖软件 sudo yum install qtwebkit -y 3.转换rpm包 sudo alien -r ...
- [UE4]世界坐标和相对坐标
一.世界坐标:相对于整个世界的坐标 二.相对坐标是相对于组件父级的坐标.如下图: 1.Mesh组件和CameraPositionArrow组件的相对坐标是相对于Root组件的坐标 2.Cube组件的相 ...
- [UE4]反射
1.根据名字获得类(C++支持,蓝图本身不支持但可以通过工厂模式模拟) 国外大神提供的封装好的C++实现: https://github.com/getsetgames/BlueprintReflec ...
- 封装MemoryCache
一.定义一个缓存接口IChace using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- C# DataGirdview手动添加数据,导出txt文件并自动对齐
//DataGirdview手动添加数据 private void btnDataGirdView_Click(object sender,EventArgs e) { dataGridV ...
- 安全测试1_Web知识简介
接下去所有的安全测试都是本人学习安全测试的过程,随笔中会截取云课堂视频中的图片(比较生动和形象,便于理解),主要目的是方便自己以后复习和巩固! 1.Web发展阶段概述: 2.web安全我能提发展形势: ...
- etree和Beautiful Soup的使用
1.lxml 是一种使用 Python 编写的库,可以迅速.灵活地处理 XML ,支持 XPath (XML Path Language),使用 lxml 的 etree 库来进行爬取网站信息 2.B ...