j].firstedge; Р G->adjlist[j].firstedge=s; Р } Р } Р getchar(); Р } Р void DFS(ALGraph *G,int i) //深度优先访问G中第i个顶点Р { Р EdgeNode *p; Р printf("visit vertex:%c\n",G->adjlist[i].vertex); Р visited[i]=TRUE; //标记该顶点已被访问Р p=G->adjlist[i].firstedge; Р while(p){ //依次对尚未访问的邻接点递归调用DFSР if (!visited[p->adjvex]) РDFS(G,p->adjvex); Р p=p->next; Р } Р } Р void DFSTraverse(ALGraph *G) //深度优先遍历图GР { Р int i; Р for (i=0;i<G->n;i++) //初始化辅助数组Р visited[i]=FALSE; Р for (i=0;i<G->n;i++) //依次对尚未访问的顶点递归调用DFSР if (!visited[i]) Р DFS(G,i); Р } Р void BFS(ALGraph *G,int k) //广度优先访问G中第k个顶点Р { Р int i; Р CirQueue Q; //构造一个循环队列Р EdgeNode *p; Р InitQueue(&Q); //初始化队列Р printf("visit vertex: %c\n",G->adjlist[k].vertex); Р visited[k]=TRUE; //标记该顶点已被访问Р EnQueue(&Q,k); //把已被访问的顶点插入队尾Р while(!QueueEmpty(&Q)) //依次对尚未访问的邻接点进行访问