图的广度优先遍历-C语言
具体代码
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define INF 0
typedef struct Queue{
int data[MAXSIZE];
int front;
int rear;
int size;
}Queue;
void Init(Queue *Q){
Q->front=0;
Q->rear=0;
Q->size=0;
}
void Push(Queue *Q,int e){
for(int i=Q->rear;i<=Q->front;i++){
if(Q->data[i]==e){
return;
}
}
Q->data[Q->front++]=e;
Q->size++;
}
int Pop(Queue *Q){
Q->size--;
return Q->data[Q->rear++];
}
typedef struct Graph{
int Vex[MAXSIZE];
int Arc[MAXSIZE][MAXSIZE];
int arcnum,vexnum;
}Graph;
void Create(Graph *G){
G->vexnum=6;
for(int i=1;i<=G->vexnum;i++){
for(int j=1;j<=G->vexnum;j++){
G->Arc[i][j]=INF;
}
}
for(int i=1;i<=G->vexnum;i++){
G->Vex[i]=i;
}
G->Arc[1][3] = 7;
G->Arc[4][6] = 7;
G->Arc[3][4] = 4;
G->Arc[2][3] = 2;
G->Arc[2][4] = 9;
G->Arc[5][6] = 6;
for(int i=1;i<=G->vexnum;i++){
for(int j=1;j<=i;j++){
G->Arc[i][j]=G->Arc[j][i];
}
}
}
void BFSTraverse(Graph G){
bool visit[G.vexnum+1];
Queue Q;
Init(&Q);
for(int i=1;i<=G.vexnum;i++){
visit[i]=false;
}
int index=1,j,k;
Push(&Q,1);
for(int i=1;i<=G.vexnum;i++){
for(j=1;j<=G.vexnum;j++){
if(G.Arc[index][j]!=INF&&!visit[j]){
Push(&Q,j);
k=j;
}
}
int temp=Pop(&Q);
printf("%d ",temp);
visit[temp]=true;
index=Q.data[Q.rear];
}
}
int main(){
Graph G;
Create(&G);
BFSTraverse(G);
}