深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS)
广度优先搜索(BFS)
1、介绍
广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索。简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次进行被访问点的邻接点,一层一层访问,直至访问完所有点,遍历结束。
2、无向图的广度优先搜索
下面是无向图的广度优先搜索过程:

所以遍历结果为:A→C→D→F→B→G→E。
3、有向图的广度优先搜索

所以遍历结果为:A→B→C→E→F→D→G。
4. C++代码
#include <iostream>
#include <queue>
using namespace std; #define MAX 20 int visited[MAX];
int map[MAX][MAX]; void bfs(int start, int n)
{
queue<int> q;
int q_top;
cout << start << " ";
visited[start] = ;
for (int i = ; i <= n; i++)
if (map[start][i] == && visited[i] == )
{
q.push(i);
visited[i] = ;
} while (!q.empty())
{
q_top = q.front();
q.pop();
cout << q_top << " ";
for (int i = ; i <= n; i++)
if (map[q_top][i] == && visited[i] == )
{
q.push(i);
visited[i] = ;
}
}
} int main(int argc, char * argv[])
{
int num_vex, num_edge, x, y;
cout << "Input number of nodes and edges >> ";
cin >> num_vex >> num_edge; //num_vex 顶点; num_edges 边数
for (int i = ; i< MAX; i++)
for (int j = ; j < MAX; j++)
map[i][j] = ; for (int i = ; i <= num_vex; i++)
visited[i] = ; for (int i = ; i <= num_edge; i++)
{
cin >> x >> y;
map[x][y] = map[y][x] = ;
}
bfs(, num_vex);
return ;
}
输入输出:

5. C语言代码
参考资料
深度优先搜索(DFS)和广度优先搜索(BFS)的更多相关文章
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 深度优先搜索DFS和广度优先搜索BFS
DFS简介 深度优先搜索,一般会设置一个数组visited记录每个顶点的访问状态,初始状态图中所有顶点均未被访问,从某个未被访问过的顶点开始按照某个原则一直往深处访问,访问的过程中随时更新数组visi ...
- 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法
深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...
随机推荐
- python读取Excel文件。
#!/usr/bin/python # -*- coding: utf-8 -*- from bs4 import BeautifulSoup import urllib.request import ...
- 20155332 2016-2017-2 《Java程序设计》第8周学习总结
20155332 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 创建Logger对象 static Logger getLogger(String name ...
- dense prediction
Dense prediction fully convolutional network for sementic segmentation 先用feature extractor 提特征,然后再使 ...
- js 分页问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- QWidget窗口类
import sys from PyQt5.QtWidgets import QWidget, QApplication,QPushButton from PyQt5.QtGui import QIc ...
- Safari导入Chrome书签
浏览器使用频率非常高,书签栏可以定时整理,我习惯使用Chrome,有时候也使用Safari所以难免需要同步Chrome书签到Safari 操作详见下面操作
- 自己对Java的一些认识
作为一个理论性比较强的学生,谈一下这段时间对java以及对程序设计的理解 java相对于其它语言有几个特点,一个是面向对象,一个是强类型 首先谈谈面向对象,关于类和对象,这个一定要有 ...
- Bootstrap 时间控件datetimepicker与timepicker
一.datetimepicker 首先,我们看看点击选择时间的时候的展示页面吧 年 月 ...
- CMake 实践教程
本篇博客是根据 <<CMake Practice>> 一文编写, 目的有三: 其一: 提取出其中的精要部分; 其二: 对其中不易理解的地方进行简要说明; 其三: 方便后续查找复 ...
- nrm安装与使用
1.什么是nrm nrm是一个npm源管理工具,使用它可以快速切换npm源. 2.安装 使用如下命令安装: npm install -g nrm 安装完后可使用 nrm -V 显示版本,注意是大写V. ...