#include<stdio.h>
#define QUEUE_MAXSIZE 30
typedef struct
{
int Data[QUEUE_MAXSIZE];
int head;
int tial;
}SeqQueue;
void QueueInit(SeqQueue *Q)
{
Q->head = Q->tail = 0;
}
int QueueIsEmpty(SeqQueue)
{
return Q.head == Q.tail;
}
int QueueIn(SeqQueue *Q,int ch)
{
if((Q->tail+1) % QUEUE_MAXSIZE == Q->head)
return 0;
Q->Data[Q->tail] = ch;
Q->tail = (Q->tail+1) % QUEUE_MAXSIZE;
return 1;
}
int QueueOut(SeqQueue *Q,int *ch)
{
if(Q->head == Q->tail)
return 0;
*ch = Q->Data[Q->head];
Q->head = (Q->head +1 ) % QUEUE_MAXSIZE;
return 1;
}
void BFSM(MatrixGraph *G,int k)
{
int i,j;
SeqQueue Q;
QueueInit(&Q);
G->isTrav[k] = 1;
printf(“->%c”,G->Vertex[k]);
QueueIn(&Q,k);
while(!QueueIsEmpty(Q))
{
QueueOut(&Q,&i);
for(j=0;j<G->VertexNum;j++)
if(G->Edge[i][j] != MAXVALUE && !G->isTrav[j])
{
printf(“->%c”,G->Vertex[j]);
G->isTrav[j] = 1;
QueueIn(&Q,j);
}
}
}
//广度优先遍历
void BFSTraverse(MatrixGraph *G)
{
int i;
for(i=0;i<G->VertexNum;i++)
G->isTrav[i] = 0;
for(i=0;i<G->VertexNum;i++)
if(!G->isTrav[i])
BFSM(G,i);
printf(“\n”);
}
//深度优先遍历
void DFSM(MatrixGraph *G,int i)
{
int j;
G->isTrav[i] = 1;
printf(“->%c”,G->Vertex[i]);
for(j=0;j<G->Vertexnum;j++)
if(G->Edges[i][j] != MAXVALUE && !G->isTrav[i])
DFSM(G,j);
}
void DFSMTraverse(MatrixGraph *G)
{
int i;
for(i=0;i<G->VertexNum;i++)
G->isTrav[i] = 0;
for(i=0;i<G->VertexNum;i++)
if(!G->isTrav[i])
DFSM(G,i);
printf(“\n”);
}