#include<stdio.h>
#define MAXVEXNUM 100
#define MAX 10
int visit[MAX];
typedef char VertexType;
typedef int EdgeType;
typedef struct {
VertexType Vertex[MAXVEXNUM];
EdgeType Edge[MAXVEXNUM][MAXVEXNUM];
int vexnum, edgenum;
} MGraph;
void CreatMGraph(MGraph *g) { //创建邻接矩阵
int i, j, k, w;
printf("依次输入顶点,边的个数:\n");
scanf("%d%d", &g->vexnum, &g->edgenum);
getchar();
printf("依次输入顶点信息:\n");
for (i = 0; i < g->vexnum; i++) {
scanf("%c", &g->Vertex[i]);
}
getchar();
for (i = 0; i < g->vexnum; i++) {
for (j = 0; j < g->vexnum; j++) {
g->Edge[i][j] = 0;
}
}
printf("按照(i,j,w)格式输入数据\n");
for (k = 0; k < g->edgenum; k++) {
printf("第%d对", k + 1);
scanf("%d%d%d", &i, &j, &w);
g->Edge[i][j] = w;
}
}
void DFS(MGraph g, int i) {
int j;
visit[i] = 1;
printf("%c\n", g.Vertex[i]);
for (j = 0; j < g.vexnum; j++) {
if (g.Edge[i][j] == 1 && visit[j] == 0 ) {
DFS(g, j);
}
}
}
void DFSTravel(MGraph g) {
int i;
for (i = 0; i < g.vexnum; i++) {
visit[i] = 0;
}
for (i = 0; i < g.vexnum; i++) {
if (visit[i] == 0) {
DFS(g, i);
}
}
}
int main() {
MGraph g;
CreatMGraph(&g);
DFSTravel(g);
return 0;
}