图的遍历算法--DFS,BFS--12月8日

本文介绍了C++中使用深度优先搜索(DFS)和广度优先搜索(BFS)算法在图结构中的应用,包括DFS的递归实现类似于前序遍历,以及BFS的层次遍历特性。通过实例展示了如何在`Graph`模板类中进行节点遍历操作。
摘要由CSDN通过智能技术生成

一、DFS
传入数组的位置
v表示数组的位置,初始点的位置 ,调用的时候传入。

在这里插入图片描述
在这里插入图片描述

二、广度优先BFS

类似层次遍历
图中的层,可以看成相邻的结点

下图所示:
在这里插入图片描述
在这里插入图片描述


//遍历
//DFSk=====类似前序遍历,
template<class T, class E>
void Graph<T, E>::DFS(int v) //v表示起点
{
	Edge<T, E> *p;
	visited[v] = true;
	cout << NodeTable[v].data<<" -> ";
	p = NodeTable[v].adj;
	while (p != 0)
	{
		if (!visited[p->dest])
		DFS(p->dest);
		p = p->link;
	}
}


//BFS====层次遍历
//不需要初始值
template<class T, class E>
void Graph<T, E>::BFS()
{
	int v=0;  //根结点的下标
	Edge<T, E>* p;
	queue<int> qu;//定义一个队列
	cout << "输入一个出发点的位置:" << endl;
	cin >> v; //
	qu.push(v);
	visited[v] = true; //这里表示入列
	while (!qu.empty())
	{
		v = qu.front(); //取队头元素
		qu.pop();      //弹出队头元素
		cout << NodeTable[v].data<<" -> ";
		p = NodeTable[v].adj;
		//找邻接点
		while (p != 0)
		{
			qu.push(p->dest);
			p = p->link;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值