图这一章我一直觉得自己学的不是很好。。。这次就只放代码,不敢多说什么了。

    1. typedef int Boolean; //Boolean是布尔类型,其值为TRUE 或者FLASE
    2. Boolean visited[MAXVEX]; //访问标志的数组
    3. /*邻接矩阵的深度优先递归算法*/
    4. void DFS(GraphAdjList G, int i){
    5. EdgeNode *p;
    6. visited[i] = TRUE;
    7. printf("%c", G.adjList[i].data); //打印定点,也可以是其它操作
    8. p = G.adjList[i].firstedge;
    9. while (p){
    10. if (!visited[p->adjvex])DFS(G, p->adjvex); //对未访问的邻接顶点递归调用
    11. p = p->next;
    12. }
    13. }
    14. /*邻接矩阵的深度遍历操作*/
    15. void DFSTraverse(GraphAdjList G){
    16. int i;
    17. for (i = 0; i < G.numVertexes; i++){
    18. visited[i] = FALSE; //初始化所有顶点状态都是未访问的状态
    19. }
    20. for (i = 0; i < G.numVertexes; i++){
    21. if (!visited[i])DFS(G, i); //对未访问过的顶点调用DFS,若连通图,只会执行一次
    22. }
    23. }

    瓦雀