《数据结构》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都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...
随机推荐
- 如何使用ABAP代码反序列化JSON字符串成ABAP结构
假设我有这个JSON字符串如下图所示: 我的任务是解析出上图黑色方框里的几个字段,比如ObjectID, ETag, BuyerID, DateTime, ID, Name等等,把它们的值存储到对应A ...
- POJ-1840 Eqs---二分
题目链接: https://vjudge.net/problem/POJ-1840 题目大意: 给出一个5元3次方程,输入其5个系数,求它的解的个数 其中系数 ai∈[-50,50] 自变量xi∈[ ...
- 2017.9.17 HTML学习总结---table标签
接上: 2.1.3 HTML表单标签与表单设计 表单是用户与服务器交互的主要方法,用户在表单中输入数据,提交给服务器程序来处理. (1)表单的组成: 文本框(text),密码框(password), ...
- url 解析
最近在做一个单页应用,使用AngularJS来处理一些页内路由(哈希#后的路由变化).自然会要解析URL中的参数.使用AngularJS自带的方法$location.search();可以自动将参数整 ...
- LeetCode(Add Two Numbers)
一.题目要求 You are given two non-empty linked lists representing two non-negative integers. The digits a ...
- 一句话说明==和equals的区别
public class equals { public static void main(String[] args) { int x=10; int y=10; String str1=new S ...
- ES6初识-Proxy和Reflect
{ let obj={ time:'2017-03-11', name:'net', _r:123 }; let monitor=new Proxy(obj,{ // 拦截对象属性的读取 get( ...
- BZOJ3288: Mato矩阵(欧拉函数 高斯消元)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 386 Solved: 296[Submit][Status][Discuss] Descriptio ...
- Linux下vim操作的一些使用技巧
以下均为个人在编程时对vim编辑器的一些心得,大神请指点,新手可以看过来 1.多文本编辑 vim -On/-on filename_1 … filename_n 如上所示,在要编辑的文件名前加上“-O ...
- docker启用镜像常用脚本
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明:-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/ST ...