typedef struct ANode//图的邻接表存储类型的定义 
 {
   int adjvex;//该边的终点编号
   struct ANode *nextarc;//指向下一条边的指针
   InfoType info;//该边的相关信息        
 }ArcNode; //边节点类型 
 typedef struct Vnode
 {
   Vertex data;//顶点信息
   ArcNode *firsttarc;//指向第一边 
 }VNode;//邻接表头结点类型

 typedef VNode AdjList[MAXV];//AdjList是邻接表类型
 typedef struct
 {
   AdjList adjlist;//邻接表
   int n,e;//图中顶点数n和边数e        
 }ALGraph;//完整的图邻接表类型 

 //图的深度优先遍历
 void DFS(ALGraph *G,int v)
 {
   ArcNode *p;
   visited[v]=1;//置已访问标记
   printf("%d ",v);//输出被访问顶点的编号 
   p=G->adjlist[v].firstarc;//p指向顶点v的第一个邻接点
   while(p!=NULL)
   {
     if(visited[p->adjvex]==0)//若p->adjvex顶点未访问,递归访问它 
       DFS(G,p->adjvex);
     p=p->nextarc;//p指向顶点v的下一个邻接点              
   }     
 }