0
点赞
收藏
分享

微信扫一扫

严蔚敏《数据结构》 图的遍历(DFS&BFS)

        图的遍历分为深度优先搜索(DFS)和广度优先搜索(BFS)两种。以下以邻接矩阵为例,表示图的深度优先搜索遍历和广度优先搜索。

DFS

由上述过程可见,DFS应该利用栈来实现遍历时的输出和回溯。本文所写的代码采用非递归的方法:

void DFS(AMGraph G,int v)
{
	stack<int>s;
	cout<<v;
	s.push(v);
	visited[v]=1;
	while(!s.empty())
	{
		for(int w=0;w<G.vexnum+1;w++)
		{
			if(G.arcs[v][w]==1&&visited[w]==0)
			{
				cout<<w;
				visited[w]=1;
				s.push(w);
				v=w;
				w=0;
			}
			else if(w==G.vexnum)
			{
				s.pop();
			    v=s.top();
			    w=0;
			}
		}
	}
}

BFS

        由此可见,利用队列先进先出的特点可以很好的实现BFS。此外,BFS是不能用递归实现的。

void BFS(AMGraph G,int v)
{
	queue<int>s;
	cout<<v;
	s.push(v);
	visited[v]=1;
	//int a=s.front();
	//cout<<a;
	while(!s.empty())
	{
		for(int w=0;w<G.vexnum+1;w++)
		{
			if(G.arcs[v][w]==1&&visited[w]==0)
			{
				cout<<w;
				visited[w]=1;
				s.push(w);
			}
			else if(w==G.vexnum)
			{
				s.pop();
			    v=s.front();
			    w=0;
			}
		
		}
	}
	
}

举报

相关推荐

0 条评论