领接矩阵实现
#include"stdio.h"
#include"stdlib.h"
typedef enum{FALSE,TRUE} Boolean;
#define MaxVertexNum 10
typedef int Vertex;
typedef struct{
int arcs[MaxVertexNum][MaxVertexNum];
int vexnum,arcnum;
}MGraph;
Boolean visited[MaxVertexNum];
void CreatMGraph(MGraph *G);
void BFS(MGraph G,Vertex v);
int main()
{
Vertex v;
MGraph G;
CreatMGraph(&G);
scanf("%d", &v);
printf("BFS from %d:",v);
BFS(G,v);
return 0;
}
具体代码如下:
void BFS(MGraph G,Vertex i)
{
int q[MaxVertexNum],front=0,rear=0;
printf(" %d",i);
visited[i]=1;
q[rear++]=i;
while(front!=rear)
{
int now=q[front++];
for(i=0;i<G.vexnum;i++)
{
if(G.arcs[now][i]==1&&visited[i]==0)
{
printf(" %d",i);
visited[i]=1;
q[rear++]=i;
}
}
}
}
邻接表实现
#include"stdio.h"
#include"stdlib.h"
#define MAX_VERTEX_NUM 10
typedef int Vertex;
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
Vertex data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum,arcnum;
} ALGraph;
typedef enum{FALSE,TRUE} Boolean;
Boolean visited[MAX_VERTEX_NUM];
void CreatALGraph(ALGraph *G);
void BFS(ALGraph *G,int v);
int main()
{
Vertex v;
ALGraph G;
CreatALGraph(&G);
scanf("%d", &v);
printf("BFS from %d:",v);
BFS(&G,v);
return 0;
}
具体代码如下:
void BFS(ALGraph *G,int i)
{
int q[100];
int f=0,r=0;
printf(" %d",i);
visited[i]=1;
q[r++]=i;
while(f!=r)
{
int v=q[f++];
for(ArcNode *p=G->vertices[v].firstarc;p!=NULL;p=p->nextarc)
{
int w=p->adjvex;
if(!visited[w])
{
printf(" %d",w);
visited[w]=1;
q[r++]=w;
}
}
}
}