BFS 邻接表创建
#include<stdio.h>
#include<iostream>
using namespace std;
#define MaxSize 100
typedef int VertexType;
typedef int EdgeType;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
int info;
}ArcNode;
typedef struct VNode
{
VertexType data;
ArcNode *firstarc;
}VNode;
typedef struct
{
VNode adjlist[MaxSize];
int n, e;
}AGraph;
void CreateDG(AGraph &G)
{
int i, k, v1, v2;
cin >> G.n;
cin >> G.e;
for (i = 1; i <= G.n; ++i)
{
G.adjlist[i].data = i;
G.adjlist[i].firstarc = NULL;
}
for (k = 0; k < G.e; ++k)
{
cin >> v1 >> v2;
ArcNode *p;
p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = v2;
p->nextarc = G.adjlist[v1].firstarc;
G.adjlist[v1].firstarc = p;
}
}
void BFSTraverse(AGraph G)
{
ArcNode *p;
int visited[MaxSize];
int i, j;
int que[MaxSize];
int front = 0;
int rear = 0;
for (i = 1; i <= G.n; ++i)
{
visited[i] = 0;
}
for (i = 1; i <= G.n; ++i)
{
if (!visited[i])
{
visited[i] = 1;
printf("%d ", G.adjlist[i].data);
rear = (rear + 1) % MaxSize;
que[rear] = G.adjlist[i].data;
while (front != rear)
{
front = (front + 1) % MaxSize;
j = que[front];
p = G.adjlist[j].firstarc;
while (p != NULL)
{
if (!visited[p->adjvex])
{
visited[p->adjvex] = 1;
printf("%d ", G.adjlist[p->adjvex].data);
rear = (rear + 1) % MaxSize;
que[rear] = p->adjvex;
}
p = p->nextarc;
}
}
}
}
printf("\n");
}
int main()
{
AGraph G;
CreateDG(G);
BFSTraverse(G);
return 0;
}
4 4
1 2
1 3
2 4
3 4
output
1 3 2 4