《数据结构》C++代码 BFS与DFS
BFS,广度优先搜索,一层一层去遍历图,故称广度优先。实现方式:队列。
DFS,深度优先搜索,撞墙才回头的遍历,称为深度优先。实现方式:递归(栈)。
这两种遍历方式,是访问图的基本方式。如果拿树做对比的话,BFS对应层次遍历,DFS则对应三种基本遍历方法(先序、中序、后序);遍历树起点只有一个根,而图则需要以每个没被遍历过的点作为起点,方能遍历完全。
没啥可说的,直接看代码。
题目描述:输入一个图,第一行N、M表示N个点、M条边,下面M行每行输入u、v表示有一条单向边(u,v);输出图的DFS和BFS序列:
输入方式:文件"map1.in"
输出方式:屏幕
代码:
#include <iostream>
#include <cstdio>
using namespace std; const int maxn = ; int N,M,Start,End;
struct edge
{
int v;
edge *next; edge(int _v=) { v=_v; }
}*E[maxn];
void AddEdge(int u,int v)
{
edge *p=new edge(v);
p->next=E[u]; E[u]=p;
} void input()
{
cin>>N>>M>>Start>>End; for(int i=;i<=N;++i) E[i]=; int u,v;
for(int i=;i<=M;++i)
{
cin>>u>>v;
AddEdge(u,v);
}
} bool mark[maxn];
void DFS(int u)
{
if(mark[u]) return; cout<<u<<" "; mark[u]=true;
for(edge *p=E[u];p;p=p->next)
{
int v=p->v;
DFS(v);
}
} class Queue
{
int Q[maxn],i,j;
public:
Queue() { i=j=; }
void clear() { i=j=; }
void in(int u) { Q[j++]=u; }
int out() { return Q[i++]; }
bool empty() { return i==j; }
int size() { return j-i; }
}; Queue Q;
void BFS(int u)
{
Q.clear();
Q.in(u); mark[u]=true;
while(!Q.empty())
{
u=Q.out();
cout<<u<<" ";
for(edge *p=E[u];p;p=p->next)
{
int v=p->v;
if(mark[v]==false) { Q.in(v); mark[v]=true; }
}
}
} int main()
{
freopen("map1.in","r",stdin); input(); for(int i=;i<=N;++i) mark[i]=false;
for(int i=;i<=N;++i) DFS(i);
cout<<endl; for(int i=;i<=N;++i) mark[i]=false;
for(int i=;i<=N;++i)
if(mark[i]==false) BFS(i);
cout<<endl; fclose(stdin);
return ;
}
《数据结构》C++代码 BFS与DFS的更多相关文章
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...
- 算法录 之 BFS和DFS
说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...
- BFS和DFS算法
昨晚刚昨晚华为笔试题,用到了BFS和DFS,可惜自己学艺不精,忘记了实现原理,现在借用大佬写的内容给自己做个提高 转自:https://www.jianshu.com/p/70952b51f0c8 图 ...
- 算法基础:BFS和DFS的直观解释
算法基础:BFS和DFS的直观解释 https://cuijiahua.com/blog/2018/01/alogrithm_10.html 一.前言 我们首次接触 BFS 和 DFS 时,应该是在数 ...
- 借助leetcode题目来了解BFS和DFS
广度优先和深度优先搜索 前言 看着这两个搜索的前提的是读者具备图这一数据结构的基本知识,这些可以直接百度一波就了解了.图也像树一样,遍历具有很多的学问在里面,下面我将借用leetcode的题目讲解一下 ...
- 简述BFS与DFS
简述BFS与DFS 最近学习了数据结构课程以及应对蓝桥杯备考,所以花费了一点时间将比较重要的两个搜索BFS(宽度优先搜索)和DFS(深度优先搜索)大致思路以及代码整理出来,如有错误,还请各位大佬批评改 ...
- BFS和DFS详解
BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...
- ACM__搜素之BFS与DFS
BFS(Breadth_First_Search) DFS(Depth_First_Search) 拿图来说 BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4, ...
- HDU 2102 A计划 (BFS或DFS)
题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...
随机推荐
- *389. Find the Difference (string + map(26)) read problems carefully
Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...
- thinkphp 去掉URL 里面的index.php
例如你的原路径是 http://localhost/test/index.php/home/goods/index.html 那么现在的地址是 http://localhost/test/home/g ...
- Computer Science: the Big Picture
1.课程PPTMIT OpenCourseWarehttp://ocw.mit.edu/courses/; Courses Stanfordhttp://cs.stanford.edu/course ...
- IOS 拦截所有push进来的子控制器
/** * 能拦截所有push进来的子控制器 */ - (void)pushViewController:(UIViewController *)viewController animated:(BO ...
- 【CCPC-Wannafly Winter Camp Day4 (Div1) G】置置置换(动态规划)
点此看题面 大致题意: 求出有多少个长度为\(n\)的排列满足对于奇数位\(a_{i-1}<a_i\),对于偶数位\(a_{i-1}>a_i\). 考虑打表? 考虑每次只有一个数\(n\) ...
- Poj(2240),Floyd求汇率是不是赚钱
题目链接:http://poj.org/problem?id=2240. Floyd算法修改一下,我要最大路径(通过转汇率变到最大)改成max. #include <iostream> # ...
- Centos下Yum安装PHP5.5,5.6
默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...
- redis 有序集合类型
- OnCollisionEnter和OnTriggerEnter
之前对这两个的用法不是特别清楚,重新学习了下,再做个测试看看效果如何: 1.新建一个场景test 2.添加一个cube,点击Inspector面板会发现系统已经默认添加了Box collisder组件 ...
- Vuex基础-Mutation
借助官网的一张图,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.不可以直接对其进行赋值改变.需要注意的是,mutations只能做一些同步的操作. 代码结构: ...