《数据结构》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都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...
随机推荐
- April 13 2017 Week 15 Thursday
Happiness takes no account of time. 幸福不觉光阴过. Do you know the theory of relativity? If you know about ...
- phpStudy-FTP_Server插件安装使用教程
FileZilla Server使用教程 ftp server安装教程 除了phpStudy for IIS外其他版本phpStudy不再集成ftp server外. phpStudy for IIS ...
- C盘压缩,电脑无法正常启动的解决方法?
有时候,我们觉得电脑很卡,因此压缩磁盘来节约资源,前段时间,由于不小心将C盘压缩了,导致电脑无法正常启动,查了一些有关的资料,发现很多人都遇到过类似的问题,如果你不想重装系统的话,那么,现在我说一下我 ...
- SSM框架整合:转自:http://blog.csdn.net/zhshulin
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- libtool: Version mismatch error. 解决方法
在编译一个软件的时候,在 ./configure 和 make 之后可能会出现如下错误: libtool: Version mismatch error. This is libtool 2.4. ...
- 如何在RedHat 7.0系统中安装mysql 5.7.22
如何在RedHat 7.0系统中安装mysql 5.7.22 今天给大家介绍一下如何安装mysql5.7,在安装之前,首先要查看的是,你的系统中有没有已经安装过的情况.键入rpm -qa|grep m ...
- SpringMVC-实现PUT请求上传文件(转)
因为在图片上传的时候使用的是二进制的方式上传,所以使用隐藏域进行方法转换方式失效,转方法: https://www.cnblogs.com/morethink/p/6378015.html 可是后来我 ...
- Notepad++安装SVN插件
第一种方法,在插件管理中安装: 插件->Plugin Manager->show plugin manager->找到subversion->install; 第二种方法,直接 ...
- Element-ui组件--pagination分页
一般写后台系统都会有很多的列表,有列表就相应的要用到分页,根据项目中写的几个分页写一下我对分页的理解,就当是学习笔记了. 这是Element-ui提供的完整的例子 <template> ...
- py2exe安装使用
一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序. py2e ...