设图 G 是用邻接表存储的,以下是一个从顶点 V i 出发深度优先遍历图的算法。 Status (*VisitFunc)(int v); // 函数变量 , 全局量 void DFSTraverse(ALGraph G ,Status( *Visit ) (int v)) { // 对以邻接表表示的图 G 作深度优先遍历 Boolean visited[G.vexnum]; // 附设访问标识数组 VisitFunc=Visit; // 使用全局量 VisitFunc , 使 DFS 不必设函数指针参数 for (v=0; ( 1 ) ; ++v) visited[v] = FALSE; // 访问标识数组初始化 for (v=0; v if (! ( 2 ) ) DFS(G, v); // 对尚未访问的顶点调用 DFS } void DFS(ALGraph G, int v) { // 从第 v 个顶点出发递对图 G 进行深度优先搜索 VisitFunc(G.vertices[v].data); // 访问第 v 个顶点 ( 3 ) ; // 设访问标志 for ( p=G.vertices[ v ].firstarc; p; p=p->nextarc) { // p 为指向弧结点的指针 w = p->adjvex; if (! ( 4 ) ) DFS(G, w); // 对 v 的尚未访问过的邻接顶点 w 递归调用 DFS } // for } // DFS