此段代码参考算法导论 int color[],d[],pi[],f[]; int time; void BFS(ALGraph *G,int s) { int i,u,v; EdgeNode *p; for(i=s+1;i<G->n+s;i++) { u=i%G->n; color[u]=WHITE; d[u]=NaN; pi[u]=NIL; } color[s]=GRAY; d[s]=0; pi[s]=NIL; Queue Q; intiQueue(&Q); enQueue(&Q,s); while(Q.tail!=Q.head) { u=deQueue(&Q); p=G->dajlist[u],firstedge; while(p!=NULL) { v=p->adjvex; if(color[v]==WHITE) { color[v]=GRAY; d[v]=d[u]+1; pi[v]=u; } p=p->next; } color[u]=BLACK; } } void DFS(ALGraph *G) { int u; time=0; for(u=0;u<G->n;u++) { color[u]=WHITE; pi[u]=NIL; } for(u=0;u<G->n;u++) { if(color[u]==WHITE) DFS_visit(G,u); } } void DFS_visit(ALGraph *G,int u) { color[u]=GRAY; d[u]=++time; EdgeNode *p; p=G->adjlist[u].firstedge; while(p!=NULL) { v=p->adjvex; if(color[v]==WHITE) DFS_visit(G,v); p=p->next; } color[u]=BLACK; f[u]=++time; } void print_path(ALGraph *G, int s, int v) { if(v==s) printf("%c,",G->adjlist[s].vertex); else if(pi[v]==NIL) printf("no path from %c to %c exists",G->adjlist[s].vertex,G->adjlist[v].vertex); else { print_path(G,s,pi[v]); printf("%c,",G->adjlist[v].vertex); } }