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