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 ...
随机推荐
- 让SH/BAT脚本定位到运行目录的相对位置,实现其脚本可在任意运行目录下被正确执行
让SH/BAT脚本定位到运行目录的相对位置 实现其脚本可在任意运行目录下被正确执行 在Linux下的bash脚本 #!/bin/bash cd `` 在Windows下的BAT脚本 echo off ...
- Volley 结合GSON或FastJson用法
自定义GSON类 public class GsonRequest<T> extends Request<T> { private final Gson mGson = new ...
- SqlServer查询中使用事务
--获取一个新的ID declare @newId bigint select @newId=MAX(ID) from BdRdRecord01 begin tran or @newId is nul ...
- win7 没有权限使用网络资源
局域网下同一工作组电脑无法访问 提示"....没有权限使用网络资源...." 一.组策略 win + R 输入gpedit.msc并回车,打开本地组策略编辑器 按如下展开 计算机配 ...
- ZBrush常用3D术语
转自:http://www.zbrushcn.com/jichu/zbrush-cy-3dsys.html Polygon(多边形) 多边形是一种形状,通过在3D空间连接几个点而创建,最简单的形式就是 ...
- 必须熟练掌握的150个Linux命令
- CRM 权限内可查看的记录数
CREATE FUNCTION dbo.fn_GetFilteredIdsSqlString ( ) , ) , ) ) RETURNS NVARCHAR(max) AS BEGIN ) SET @s ...
- 基于Boost的同步TCP通信
1:客户端 #include <iostream> #include <boost/asio.hpp> using namespace boost; using namespa ...
- tips:Java中的switch的选择因子
tips:Java中的switch的选择因子! /* switch(){ } */ switch的()中的判断条件能是什么类型呢? 事实上,在我们学习c++的了解中,switch的参数是一个能 ...
- 最精简的自定义.net 开发框架
一. 通过自定义的HttpModule和HttpHandler,重写url,自定义路由规则,实现 Web API功能. 简单说 就是 请求路径 例如 service/method, 那么就指向当前应 ...