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

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

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

#include<stdio.h>
//初始化图
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;i++)
		visited[i]=0;
	for(i=0;i<V;i++)
	{
		if(!visited[i])
		{
			visited[i]=1;
			printf("%c ",vexs[i]);
			EnQueue(i);
			while(front!=rear)
			{
				DeQueue(&i);
				for(j=0;j<V;j++)
				{
					if(arc[i][j]==1&&!visited[j])
					{
						visited[j]=1;
						printf("%c ",vexs[j]);
						EnQueue(j);
					}
				}
			}
		}
	}
}

只需要在横线处把图的信息输入就可以了,其中V是顶点数,E是边数,N是循环队列长度。 对于

我们这里采用在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         

广度优先搜索算法的基本原理
          可以参考算法导论

其中s为根节点,也叫源节点,  .d是指到源节点的距离, .π是指父节点是谁,颜色有灰色指被发现还没遍历过黑色指已遍历




参考资料:

大话数据结构
算法导论

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值