#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10
typedef int Status;
typedef int QElemType;
typedef struct
{
QElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return OK;
}
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front + MAXSIZE ) % MAXSIZE;
}
Status QueueEmpty(SqQueue Q)
{
return Q.rear == Q.front ;
}
Status EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear+1)% MAXSIZE == Q->front)
return ERROR;
Q->data[Q->rear] = e;
Q->rear = (Q->rear+1) % MAXSIZE;
return OK;
}
Status DeQueue(SqQueue *Q,QElemType *e)
{
if(Q->front == Q->rear)
return ERROR;
*e = Q->data[Q->front];
Q->front = (Q->front+1) % MAXSIZE;
return OK;
}
typedef char VertexType;
typedef int EdgeType;
#define MAXVEX 100
#define INFINITY 65535
typedef struct
{
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numVertexes,numEdges;
}MGraph;
void CreateMGraph(MGraph *G)
{
int i,j,k,w;
printf("input vextexs and edges: \n");
scanf("%d,%d",&G->numVertexes,&G->numEdges);
char g = getchar();
printf("input vexs: \n");
for(i=0;i<G->numVertexes;i++)
{
scanf("%c",&G->vexs[i]);
char g = getchar();
}
for(i=0;i<G->numVertexes;i++)
for(j=0;j<G->numVertexes;j++)
G->arc[i][j] = INFINITY;
for(k=0;k<G->numEdges;k++)
{
printf("input edges and num:\n");
scanf("%d,%d,%d",&i,&j,&w);
G->arc[i][j] = w;
G->arc[j][i] = G->arc[i][j];
}
}
void Display(MGraph *G)
{
int i,j;
for(i=0;i<G->numVertexes;i++)
{
for(j=0;j<G->numVertexes;j++)
printf("%08d ",G->arc[i][j]);
printf("\n");
}
printf("\n");
}
typedef int Boolean;
Boolean visited[MAXVEX];
void DFS(MGraph G,int i)
{
int j;
visited[i] = TRUE;
printf("%c->",G.vexs[i]);
for(j=0;j<G.numVertexes;j++)
{
if(G.arc[i][j] != INFINITY && !visited[j])
DFS(G,j);
}
}
void DFSTraverse(MGraph G)
{
int i;
for(i=0;i<G.numVertexes;i++)
{
visited[i] = FALSE;
}
for(i=0;i<G.numVertexes;i++)
{
if(!visited[i])
DFS(G,i);
}
}
void BFSTraverse(MGraph G)
{
int i,j;
SqQueue Q;
for(i=0;i<G.numVertexes;i++)
visited[i] = FALSE;
InitQueue(&Q);
for(i=0;i<G.numVertexes;i++)
{
if(!visited[i])
{
visited[i] = TRUE;
printf("%c=>",G.vexs[i]);
EnQueue(&Q,i);
while(!QueueEmpty(Q))
{
DeQueue(&Q,&i);
for(j=0;j<G.numVertexes;j++)
{
if(G.arc[i][j] != INFINITY && !visited[j])
{
visited[j] = TRUE;
printf("%c=>",G.vexs[j]);
EnQueue(&Q,j);
}
}
}
}
}
}
void test()
{
MGraph *G = (MGraph*)malloc(sizeof(MGraph));
CreateMGraph(G);
Display(G);
DFSTraverse(*G);
printf("\n");
BFSTraverse(*G);
printf("\n");
}
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10
typedef int Status;
typedef int QElemType;
typedef struct
{
QElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return OK;
}
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front + MAXSIZE ) % MAXSIZE;
}
Status QueueEmpty(SqQueue Q)
{
return Q.rear == Q.front ;
}
Status EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear+1)% MAXSIZE == Q->front)
return ERROR;
Q->data[Q->rear] = e;
Q->rear = (Q->rear+1) % MAXSIZE;
return OK;
}
Status DeQueue(SqQueue *Q,QElemType *e)
{
if(Q->front == Q->rear)
return ERROR;
*e = Q->data[Q->front];
Q->front = (Q->front+1) % MAXSIZE;
return OK;
}
typedef char VertexType;
typedef int EdgeType;
#define MAXVEX 100
#define INFINITY 65535
typedef struct
{
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numVertexes,numEdges;
}MGraph;
void CreateMGraph(MGraph *G)
{
int i,j,k,w;
printf("input vextexs and edges: \n");
scanf("%d,%d",&G->numVertexes,&G->numEdges);
char g = getchar();
printf("input vexs: \n");
for(i=0;i<G->numVertexes;i++)
{
scanf("%c",&G->vexs[i]);
char g = getchar();
}
for(i=0;i<G->numVertexes;i++)
for(j=0;j<G->numVertexes;j++)
G->arc[i][j] = INFINITY;
for(k=0;k<G->numEdges;k++)
{
printf("input edges and num:\n");
scanf("%d,%d,%d",&i,&j,&w);
G->arc[i][j] = w;
G->arc[j][i] = G->arc[i][j];
}
}
void Display(MGraph *G)
{
int i,j;
for(i=0;i<G->numVertexes;i++)
{
for(j=0;j<G->numVertexes;j++)
printf("%08d ",G->arc[i][j]);
printf("\n");
}
printf("\n");
}
typedef int Boolean;
Boolean visited[MAXVEX];
void DFS(MGraph G,int i)
{
int j;
visited[i] = TRUE;
printf("%c->",G.vexs[i]);
for(j=0;j<G.numVertexes;j++)
{
if(G.arc[i][j] != INFINITY && !visited[j])
DFS(G,j);
}
}
void DFSTraverse(MGraph G)
{
int i;
for(i=0;i<G.numVertexes;i++)
{
visited[i] = FALSE;
}
for(i=0;i<G.numVertexes;i++)
{
if(!visited[i])
DFS(G,i);
}
}
void BFSTraverse(MGraph G)
{
int i,j;
SqQueue Q;
for(i=0;i<G.numVertexes;i++)
visited[i] = FALSE;
InitQueue(&Q);
for(i=0;i<G.numVertexes;i++)
{
if(!visited[i])
{
visited[i] = TRUE;
printf("%c=>",G.vexs[i]);
EnQueue(&Q,i);
while(!QueueEmpty(Q))
{
DeQueue(&Q,&i);
for(j=0;j<G.numVertexes;j++)
{
if(G.arc[i][j] != INFINITY && !visited[j])
{
visited[j] = TRUE;
printf("%c=>",G.vexs[j]);
EnQueue(&Q,j);
}
}
}
}
}
}
void test()
{
MGraph *G = (MGraph*)malloc(sizeof(MGraph));
CreateMGraph(G);
Display(G);
DFSTraverse(*G);
printf("\n");
BFSTraverse(*G);
printf("\n");
}