IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Algorithm第四版算法 C++实现(十四)——广度优先搜索(BFS) -> 正文阅读

[数据结构与算法]Algorithm第四版算法 C++实现(十四)——广度优先搜索(BFS)

既然上一期说了DFS,这一期当然要来说BFS了。广度优先搜索和DFS还是很相似的,只不过我们会先找出和起点相邻的顶点,然后再依次进入这些顶点,并找到所有与其相邻的顶点,重复上述步骤直到该连通分支的所有节点都被标记。
作者很巧妙的利用了queue的FIFO特性来实现广度优先搜索。(我用STL不是因为懒哈)

路径:

请添加图片描述

in head.h

class BFS
{
private:
	bool *marked;	//标记数组
	std::vector<std::string> path;	//标记路径的数组
	void bfs(graph g, int v);	//广度优先搜索核心
	bool mark(int v);	//返回顶点是否被标记
public:
	BFS(graph g, int s);	//构造函数,第一个参数是图形类,第二个参数起点
	std::string path_to(int v);		//返回路径的字符串
};

in head.cpp

/*广度优先搜索*/
BFS::BFS(graph g, int s)
{
	marked = new bool[g.numv()];
	std::fill(marked, marked + g.numv(), 0);
	path.resize(g.numv());
	path[s] += std::to_string(s);
	bfs(g, s);		//进入函数
}
bool BFS::mark(int v)
{
	return marked[v];
}
void BFS::bfs(graph g, int v)
{
	marked[v] = true;
	std::queue<int> q;	//用了queue STL,需要引入<queue>
	q.push(v);	
	while (!q.empty())
	{
		int w = q.back();
		q.pop();
		std::vector<int> gv = g.iterator(w);
		for (auto i : gv)
		{
			//printf("%d %d\n", w,marked[w]);
			if (!mark(i))
			{
				path[i] = path[w] + " " + std::to_string(w);	
				marked[w] = true;
				q.push(i);	//q用来储存与当前顶点有连接的顶点
			}
		}
	}
	
}
std::string BFS::path_to(int v)
{
	return path[v];
}

运行结果:
在这里插入图片描述
*BFS与DFS产生的路径并不一定相同,相同只是因为碰巧
如果你看过上一期的深度优先搜索,你会发现只有bfs方法与上期略有差别

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:41:03  更:2021-08-10 13:42:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:25:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码