以邻接表为存储结构遍历 #include <stdio.h> #include <stdlib.h> #define MAX_VEX_NUM 20//节点的最大数目 typedef struct ArcNode{//弧结点 int adjvex;//该弧所指向的另一个顶点的位置 struct ArcNode *nextarc;//主顶点所链接的下一个弧 int *Info;//弧的权 }ArcNode; typedef struct TNode{//头结点 int data;//顶点的信息 ArcNode *firstarc;//依附该顶点的第一条弧 }TNode;//保存顶点的数组 void dfs (TNode g[],int v,int visited[]){//递归深度优先搜索 ArcNode *w; int i; printf ("%d",v); visited[v]=1; w=g[v].firstarc; while(w!=NULL) {i=w->adjvex; if(visited[i]==0) dfs(g,i,visited); w=w->nextarc; } } void traverse (TNode g[],int n){//遍历 int i; static int visited[MAX_VEX_NUM]; for (i=1;i<=n;i++) visited[i]=0; for (i=1;i<=n;i++) if (visited[i]==0) dfs (g,i,visited); } void main() { TNode List[MAX_VEX_NUM]; int n,temp; printf("input the num of the node:/n"); scanf("%d",&n); for (int i=1;i<=n;i++){ printf("/nintput the info of the %d node:",i); scanf("%d",&List[i].data); } for (int i=1;i<=n;i++){ printf("/n输入和编号为%d的节点邻接的结点编号(输入负数以结束%d编号的输入):/n",i,i); ArcNode *AD=(ArcNode*)malloc(sizeof(ArcNode)); scanf("%d",&(*AD).adjvex); List[i].firstarc=AD; scanf("%d",&temp); while(temp>=0){ArcNode *ADtemp=(ArcNode*)malloc(sizeof(ArcNode)); (*AD).nextarc=ADtemp; (*ADtemp).adjvex=temp; AD=ADtemp; scanf("%d",&temp); } if (temp<0) {(*AD).nextarc=NULL;continue;} } printf("深度优先搜索的顺序(以节点编号):"); traverse(List,n); }