图的深度与广度遍历及最小生成树

本文探讨了图的深度优先搜索(DFS)和广度优先搜索(BFS)算法,并介绍了如何利用这些算法找到图的最小生成树。通过具体的代码实现,详细解释了算法的工作原理和应用。
摘要由CSDN通过智能技术生成

上一篇文章讲了图的有关概念以及图的两种存储方式, 点击打开链接
接下来我们一起学习图的两种遍历及最小生成树的实现。

一、图的遍历
1、广度优先遍历(Breadth First Search, BFS)

广度优先搜索类似于树的层序遍历,看一个例子:
假设我们都从节点0开始遍历,无向图遍历顺序为0,3,4,1,2,,有向图遍历顺序为0,3,4,1,2。

下面是实现的代码,需要借助队列来完成:

// 图的广度优先遍历 
	void BFS(const V& v)
	{
		queue<int> q;
		//标记是否已经遍历,遍历过为true
		vector<bool> visited(_v.size(), false);
		size_t index = GetIndexOfV(v);
		q.push(index);
		_BFS(q, visited);

		//避免漏掉与其他顶点无关的点
		for (size_t i = 0; i < _v.size(); i++)
		{
			if (visited[i] == false)
			{
				q.push(i);
				_BFS(q, visited);
			}
		}
		cout << endl;
	}
       void _BFS(queue<int>& q, vector<bool>& visited)
	{
		while (!q.empty())
		{
			size_t index = q.front();
			q.pop();
			if (visited[index] == true)
				continue;
			visited[index] = true;
			cout << _v[index] << " ";

			pNode pCur = _linkEdges[index];
			while (pCur)
			{
				if (visited[pCur->_dst] == false)
					q.push(pCur->_dst);
				pCur = pCur->_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值