BFS(广度优先搜索)

Posted ygsworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BFS(广度优先搜索)相关的知识,希望对你有一定的参考价值。

简介

BFS的过程是首先访问起始结点v,接着访问顶点v的所有未被访问的邻接结点,然后对每个继续进行上述步骤,直到所有结点都被访问过为止,当然,在访问过程中,需要使用一个队列,然后类似二叉树的层次遍历来访问。

BFS通俗的来讲,就如通病毒扩散一般蔓延。往往采用BFS求解迷宫问题的入口到出口的最短路径。

运算步骤

 

void BFS(AdjGraph L,int v)
{
	ANode *p;
	int queue[MAXV];
	int front = 0;
	int rear = 0;
	int w;
	for(int i =0;i<L.pointsnum;i++)//初始化数组
	{
		visted[i] = 0;
	}
	cout<<" "<<L.adjlist[v].data;
	visted[v] = 1;//置已访问
	rear = (rear + 1 )% MAXV;
	queue[rear] = v;
	while(front != rear)//队列不为空循环
	{
		front = (front + 1)%MAXV;
		w = queue[front];//出队
		p = L.adjlist[w].firstarc;
		while( p != NULL)//查找所有邻接结点
		{
			if(visted[p->adjvex]==0)//当前未被访问
			{
				cout<<" "<<L.adjlist[p->adjvex].data;//打印
				visted[p->adjvex] = 1;//标记
				rear = (rear + 1) % MAXV;
				queue[rear] = p->adjvex;
			}
			p = p->nextarc;
		}
	}
}

 

  

 

以上是关于BFS(广度优先搜索)的主要内容,如果未能解决你的问题,请参考以下文章

广度优先搜索(BFS)的一个(重要!)细节。

DFS-深度优先搜索与BFS-广度优先搜索

基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)

广度优先搜索(BFS)----------------(TjuOj1140_Dungeon Master)

面试刷题:广度优先搜索BFS | 第91期

使用BFS(广度优先搜索)解迷宫类问题