1. #include<stdio.h>
    2. #define MAXVEXNUM 100
    3. #define MAX 10
    4. int visit[MAX];
    5. typedef char VertexType;
    6. typedef int EdgeType;
    7. typedef struct {
    8. VertexType Vertex[MAXVEXNUM];
    9. EdgeType Edge[MAXVEXNUM][MAXVEXNUM];
    10. int vexnum, edgenum;
    11. } MGraph;
    12. void CreatMGraph(MGraph *g) { //创建邻接矩阵
    13. int i, j, k, w;
    14. printf("依次输入顶点,边的个数:\n");
    15. scanf("%d%d", &g->vexnum, &g->edgenum);
    16. getchar();
    17. printf("依次输入顶点信息:\n");
    18. for (i = 0; i < g->vexnum; i++) {
    19. scanf("%c", &g->Vertex[i]);
    20. }
    21. getchar();
    22. for (i = 0; i < g->vexnum; i++) {
    23. for (j = 0; j < g->vexnum; j++) {
    24. g->Edge[i][j] = 0;
    25. }
    26. }
    27. printf("按照(i,j,w)格式输入数据\n");
    28. for (k = 0; k < g->edgenum; k++) {
    29. printf("第%d对", k + 1);
    30. scanf("%d%d%d", &i, &j, &w);
    31. g->Edge[i][j] = w;
    32. }
    33. }
    34. void DFS(MGraph g, int i) {
    35. int j;
    36. visit[i] = 1;
    37. printf("%c\n", g.Vertex[i]);
    38. for (j = 0; j < g.vexnum; j++) {
    39. if (g.Edge[i][j] == 1 && visit[j] == 0 ) {
    40. DFS(g, j);
    41. }
    42. }
    43. }
    44. void DFSTravel(MGraph g) {
    45. int i;
    46. for (i = 0; i < g.vexnum; i++) {
    47. visit[i] = 0;
    48. }
    49. for (i = 0; i < g.vexnum; i++) {
    50. if (visit[i] == 0) {
    51. DFS(g, i);
    52. }
    53. }
    54. }
    55. int main() {
    56. MGraph g;
    57. CreatMGraph(&g);
    58. DFSTravel(g);
    59. return 0;
    60. }