最简洁的广度优先遍历算法模板

最简洁的广度优先遍历算法模板

         广度优先搜索(breadth-first search, BFS)是一种最常见的最简单的搜索算法,但是往往代码看起来都相当的复杂,要做起题目来经常就写不出来,因此得把牺牲一下代码的封装性,可重用性,简化成瞬间能回忆起来的形式。

#include
//初始化图
const int N=100,V=9,E=15;
char vexs[V]=_______________________________;
int arc[V][V]=______________________________;
//初始化队列
int Queue[N];
int front=1,rear=1;
int visited[V];
//入队
void EnQueue(int i)
{
	if((rear+1)%N!=front)
	{
		Queue[rear]=i;
		rear=(rear+1)%N;
	}
}
//出队
void DeQueue(int *i)
{
	if(front!=rear)
	{
		*i=Queue[front];
		front=(front+1)%N;
	}
}
//主函数
int main()
{
	int i,j;

	//广度优先遍历
	for(i=0;i

只需要在横线处把图的信息输入就可以了,其中V是顶点数,E是边数,N是循环队列长度。 对于
最简洁的广度优先遍历算法模板_第1张图片
我们这里采用在main函数里面初始化图

	//初始化
	arc[0][1]=1;
	arc[0][5]=1;

	arc[1][2]=1; 
	arc[1][8]=1; 
	arc[1][6]=1; 
	
	arc[2][3]=1; 
	arc[2][8]=1; 
	
	arc[3][4]=1;
	arc[3][7]=1;
	arc[3][6]=1;
	arc[3][8]=1;

	arc[4][5]=1;
	arc[4][7]=1;

	arc[5][6]=1; 
	
	arc[6][7]=1; 

	
	for(i = 0; i < V; i++)
	{
		for(j = i; j < V; j++)
		{
			arc[j][i] =arc[i][j];
		}
	}

广度优先搜索结果:

            A B F C G I E D H         

广度优先搜索算法的基本原理
          可以参考算法导论
最简洁的广度优先遍历算法模板_第2张图片
其中s为根节点,也叫源节点,  .d是指到源节点的距离, .π是指父节点是谁,颜色有灰色指被发现还没遍历过黑色指已遍历

最简洁的广度优先遍历算法模板_第3张图片
最简洁的广度优先遍历算法模板_第4张图片

参考资料:

大话数据结构
算法导论

你可能感兴趣的:(数据结构与算法)