#include \
#include \
#include \
#include \
#define MAX_VERTEX_NUM 10
#define MAXQSIZE 10
int visited[MAX_VERTEX_NUM];
typedef struct Node{
int adjvex;
struct Node *next;
}EdgeNode;
typedef struct VNode{
int vertex;
EdgeNode *firstedge;
}VertexNode;
typedef VertexNode AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList adjlist;
int n,e;
}ALGraph;
typedef struct{
int *base;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue *Q) {
Q->base=(int *)malloc(MAXQSIZE*sizeof(int));
if(!Q->base)
return 0;
Q->front=Q->rear=0;
return 1; }
int EnQueue(SqQueue *Q,int e) {
if((Q->rear+1)%MAXQSIZE==Q->front)
return 0;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return 1; }
int DeQueue(SqQueue *Q) {
int i;
i=Q->base[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return i; }
int QueueEmpty(SqQueue *Q) {
if(Q->front==Q->rear)
return 1;
return 0; }
void BFS(ALGraph *G,int k)
{
int e;
SqQueue Q;
EdgeNode *p;
InitQueue(&Q);
printf(\这次访问顶点:%d\\n\
visited[k]=1;
p=G->adjlist[k].firstedge;
while(p!=NULL)
{
EnQueue(&Q,p->adjvex);
printf(\这次访问顶点:%d\\n\
visited[p->adjvex]=1;
p=p->next;
}
while(!QueueEmpty(&Q))
{
e=DeQueue(&Q);
p=G->adjlist[e].firstedge;
while( p!=NULL )
{
if(visited[p->adjvex]==0)
{
printf(\这次访问顶点:%d\\n\
visited[p->adjvex]=1;
EnQueue(&Q,p->adjvex);
}
p=p->next;
} } }
void CreateALGraph(ALGraph *G)
{
int i,j,k;
EdgeNode *s;
printf(\设定无向图的顶点数n:\\n\
scanf(\
printf(\设定无向图的边数e:\\n\
scanf(\
for(i=0;i<(G->n);i++) {