无向连通图的深度优先遍历(要求存储结构用邻接表)

怎么就错了呢

建立一个无向连通图的邻接表(邻接表的建立方式约定采用头插法,边的输入顺序按照顶点的编号由小到大输入,顶点中存储的信息为顶点编号,顶点从1开始编号),然后给出该图的深度优先搜索序列(从编号为1的顶点开始深度优先搜索)。

输入
第1行输入两个整数,分别表示图中的顶点数n和边数m
第2-m+1行每行输入两个整数i和j,分别表示编号为i的顶点和编号为j的顶点之间有一条边(顶点编号从1开始,按照顶点编号从小到大的顺序输入边)
输出
输出1行信息共有n个整数,分别表示深度优先搜索图间经过的顶点编号序列,每两个整数之间有一个空格。

样例输入 Copy
8 9
1 2
1 3
2 4
2 5
3 6
3 7
4 8
5 8
6 7
样例输出 Copy
1 3 7 6 2 5 8 4


#include <stdio.h>
#include <stdlib.h>

#define MAXVEX 30

int visited[MAXVEX]; // 定义一个全局数组,表示图中的顶点是否已经访问过,0表示没有访问,1表示已经访问

typedef char VertexType; // 顶点类型应由用户定义
typedef int EdgeType; // 边上的权值类型应由用户定义

typedef struct EdgeNode { // 边表结点
    int adjvex;    // 邻接点域,存储该顶点对应的下标
    EdgeType info;  // 用于存储权值,对于非加权图可以不需要
    struct EdgeNode *next; // 链域,指向下一个邻接点
} EdgeNode;

typedef struct VertexNode { // 顶点表结点
    VertexType data;  // 顶点域,存储顶点信息
    EdgeNode *firstEdge; // 边表头指针
} VertexNode;

typedef struct Graph {
    int numNodes, numEdges;
    VertexNode AdjList[MAXVEX];
} ALGraph;
void DFS(ALGraph G, int v);
void CreateGraph(ALGraph &G) {
   /*该函数平台已提供*/
}

int main(void) {
    ALGraph G ;
    scanf("%d %d", &G.numNodes, &G.numEdges);
    CreateGraph(G); //假设图中顶点从1开始编号,建立图的连接表
    DFS(G,1); //从编号为1的顶点开始深度优先搜索图
    return 0;
}
/*仅提交以下代码*/ 
void DFS(ALGraph G, int v) {

}

void DFS(ALGraph G, int v) {
    EdgeNode *p;
    printf("%d ",&v); 
    visited[v]=1;
    p=G.AdjList[v].firstEdge;
    while(p!=NULL){
        int w=p->adjvex;
        if(!visited[w]) 
        DFS(G,w);
        p=p->next;
    }
}