邻接表表示的图: #include"stdio.h" #include"stdlib.h" #define MaxVertexNum 50 //定义最大顶点数 typedef struct node{ //边表结点 int adjvex; //邻接点域 struct node *next; //链域 }EdgeNode; typedef struct vnode{ //顶点表结点 char vertex; //顶点域 EdgeNode *firstedge; //边表头指针 }VertexNode; typedef VertexNode AdjList[MaxVertexNum]; //AdjList 是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n,e; //图中当前顶点数和边数 } ALGraph; //图类型 //=========建立图的邻接表======= void CreatALGraph(ALGraph *G) { int i,j,k; char a; EdgeNode *s; //定义边表结点 printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); //读入顶点数和边数 fflush(stdin); //清空内存缓冲 printf("Input Vertex string:"); for(i=0;in;i++) //建立边表 { scanf("%c",&a); G->adjlist[i].vertex=a; //读入顶点信息 G->adjlist[i].firstedge=NULL; //边表置为空表 } printf("Input edges,Creat Adjacency List\n"); for(k=0;ke;k++) { //建立边表 scanf("%d%d",&i,&j); //读入边(Vi,Vj)的顶点对序号 s=(EdgeNode *)malloc(sizeof(EdgeNode)); //生成边表结点 s->adjvex=j; //邻接点序号为 j s->next=G->adjlist[i].firstedge; G->adjlist[i].firstedge=s; //将新结点*S 插入顶点Vi 的边表头部 s=(EdgeNode *)malloc(sizeof(EdgeNode)); s->adjvex=i; //邻接点序号为i s->next=G->adjlist[j].firstedge; G->adjlist[j].firstedge=s; //将新结点*S 插入顶点Vj 的边表头部 } } //=========定义标志向量,为全局变量======= typedef enum{FALSE,TRUE} Boolean; Boolean visited[MaxVertexNum]; //========DFS:深度优先遍历的递归算法====== void DFSM(ALGraph *G,int i) {//以Vi 为出发点对邻接链表表示的图G 进行DFS 搜索 EdgeNode *p; printf("%c",G->adjlist[i].vertex); //访问顶点Vi visited[i]=TRUE; //标记Vi 已访问 p=G->adjlist[i].firstedge; //取Vi 边表的头指针 while(p) { //依次搜索Vi 的邻接点Vj,这里j=p->adjvex if(! visited[p->adjvex]) //若Vj 尚未被访问 DFSM(G,p->adjvex); //则以Vj 为出发点向纵深搜索 p=p-...