#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
int vis[MaxSize]={0};
typedef char DataType;
typedef struct{
int vtnum, egnum;
DataType vt[MaxSize];
int eg[MaxSize][MaxSize];
} MGraph;
void CreatGraph(MGraph *G){
int i,j,k;
printf("请输入顶点数和边数(最多%d个顶点):",MaxSize);
scanf("%d%d",&G->vtnum,&G->egnum);
fflush(stdin);
printf("输入各顶点:");
for(i=0;i<G->vtnum;i++){
scanf("%c",&G->vt[i]);
getchar();
}
for(i=0;i<G->vtnum;i++)
for(j=0;j<G->vtnum; j++)
G->eg[i][j]=0;
printf("输入各边 <Vi,Vj> 的上下标i,j:\n");
for(k=0;k<G->egnum;k++){
scanf("%d%d", &i, &j);
G->eg[j][i] = G->eg[i][j] = 1;
getchar();
}
}
void DFS(MGraph *G, int v)
{
printf("%c ", G->vt[v]);
vis[v] = 1;
for (int j = 0; j < G->vtnum; j++)
if (G->eg[v][j] == 1 && vis[j] == 0)
DFS(G, j);
}
void BFS(MGraph *G, int v)
{
int i, j;
DataType Q[MaxSize];
int front = -1, rear = -1;
printf("%c ", G->vt[v]);
vis[v] = 1;
Q[++rear] = v;
while(front != rear){
i = Q[++front];
for(j = 0; j < G->vtnum; j++)
if(G->eg[i][j] == 1 && vis[j] == 0){
printf("%c ", G->vt[j]);
vis[j] = 1;
Q[++rear] = j;
}
}
}
int main(){
int i;
MGraph MG;
CreatGraph(&MG);
for (i = 0; i < MaxSize; i++) vis[i] = 0;
printf("\n深度优先遍历序列是:");
DFS(&MG, 0);
for (i = 0; i < MaxSize; i++) vis[i] = 0;
printf("\n广度优先遍历序列是:");
BFS(&MG, 0);
return 0;
}
请输入顶点数和边数(最多10个顶点):6 5
输入各顶点:A B C D E F
输入各边 <Vi,Vj> 的上下标i,j:
0 1
0 2
2 3
1 4
0 5
深度优先遍历序列是:A B E C D F
广度优先遍历序列是:A B C F E D