基于C语言的广度优先算法

Posted Mr.zhou_Zxy

tags:

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

广度优先算法

#include"./Graph.cpp" 	
void BFS(MGraph g,int v)
{
	int qu[MAXV],front=0,rear=0;//定义循环队列并初始化 
	int visited[MAXV];//定义存放节点的访问标志的数组 
	int w,i;
	for(i=0;i<g.n;i++)//访问标志数组初始化 
	visited[i]=0;//输出被访问顶点的编号 
	printf("%3d",v);//置已访问标记 
	visited[v]=1;
	rear=(rear+1)%MAXV;//V进队 
	qu[rear]=v;//若队列不空时循环 
	while(front!=rear)
	{
		front=(front+1)%MAXV;
		w=qu[front];//出队并赋给V 
		for(i=0;i<g.n;i++)//找与W相邻的顶点 
			if(g.edges[w][i]!=0 && g.edges[w][i]!=INF && visited[i]==0)
			{//若当前邻接顶点i未被访问 
				printf("%3d",i);//访问相邻顶点 
				visited[i]=1;//置该定点已被访问的标志 
				rear=(rear+1)%MAXV;//该顶点进队 
				qu[rear]=i;
			}
	}
	printf("\\n");
}
int main()
{
	MGraph g;
	int A[][MAXV]={
					{INF,4,6,6,INF,INF,INF},
					{4,INF,1,INF,7,INF,INF},
					{6,1,INF,2,6,4,INF},
					{6,INF,2,INF,INF,1,6},
					{INF,7,6,INF,INF,1,6},
					{INF,INF,4,5,1,INF,8},
					{INF,INF,INF,INF,6,8,INF}
					};
	int n=7,e=12;
	CreateMat(g,A,n,e);//创建邻接矩阵 
	printf("图的邻接矩阵");
	DispMat(g);//输出邻接矩阵 
	printf("广度优先遍历\\n");
	BFS(g,0);	
}	

以上是关于基于C语言的广度优先算法的主要内容,如果未能解决你的问题,请参考以下文章

C语言之广度优先算法

数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)

数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)

数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)

图的深度/广度优先遍历C语言程序

最短路径问题之广度优先算法BFS(C语言)