参考:
http://www.cnblogs.com/kubixuesheng/p/4399705.html
http://www.cnblogs.com/dolphin0520/archive/2011/07/13/2105236.html
图的深度优先遍历递归算法大概如下:
1 //访问标志数组 2 int visited[MAX] = {0}; 3 4 //用邻接表方式实现深度优先搜索(递归方式) 5 //v 传入的是第一个需要访问的顶点 6 void DFS(MGraph G, int v) 7 { 8 //图的顶点的搜索指针 9 ArcNode *p; 10 //置已访问标记 11 visited[v] = 1; 12 //输出被访问顶点的编号 13 printf("%d ", v); 14 //p指向顶点v的第一条弧的弧头结点 15 p = G.vertices[v].firstarc; 16 while (p != NULL) 17 { 18 //若p->adjvex顶点未访问,递归访问它 19 if (visited[p->adjvex] == 0) 20 { 21 DFS(G, p->adjvex); 22 } 23 //p指向顶点v的下一条弧的弧头结点 24 p = p->nextarc; 25 } 26 }