图C实现 – 深度优先搜索

我正在尝试使用图的邻接列表表示来实现深度优先搜索算法。 这是我的代码:

#include #include struct edge { int vertexIndex; struct edge *edgePtr; }edge; struct vertex { int vertexKey; int visited; struct edge *edgePtr; }vertex; void insertVertex(struct vertex *g, int vertexKey, int *vertexCount) { g[*vertexCount].vertexKey=vertexKey; g[*vertexCount].edgePtr=NULL; g[*vertexCount].visited=0; (*vertexCount)++; } void insertEdge(struct vertex *g,int vertex1, int vertex2) { struct edge *e,*e1,*e2; e=g[vertex1].edgePtr; while(e&& e->edgePtr) { e=e->edgePtr; } e1=(struct edge *)malloc(sizeof(*e1)); e1->vertexIndex=vertex2; e1->edgePtr=NULL; if(e) e->edgePtr=e1; else g[vertex1].edgePtr=e1; e=g[vertex2].edgePtr; while(e&& e->edgePtr) { e=e->edgePtr; } e2=(struct edge *)malloc(sizeof(*e2)); e2->vertexIndex=vertex1; e2->edgePtr=NULL; if(e) e->edgePtr=e2; else g[vertex2].edgePtr=e2; } void printGraph(struct vertex *g, int *vertexCount) { int i; struct edge *e; for(i=0;i%d",e->vertexIndex); e=e->edgePtr; } printf("\n"); } } void dfs(struct vertex *g,int vertex1) { g[vertex1].visited=1; printf("%d ",vertex1); struct edge *e; e=g[vertex1].edgePtr; while(e) { if(!(g[e->vertexIndex].visited)) dfs(g,e->vertexIndex); e=e->edgePtr; } } main() { struct vertex *g1[10]; int vc1=0; insertVertex(g1,5,&vc1); insertVertex(g1,3,&vc1); insertVertex(g1,4,&vc1); insertVertex(g1,2,&vc1); insertVertex(g1,9,&vc1); insertEdge(g1,0,1); insertEdge(g1,0,2); insertEdge(g1,1,3); insertEdge(g1,1,4); dfs(g1, 0); return 0; } 

问题是,当我运行此代码时,在打印’dfs’输出结束时,程序意外停止,我不明白为什么。 你能帮我解决这个问题吗?

我知道了! 有一个小错误..

在main函数中,g1的声明应该是

 struct vertex g1[10]; 

代替

 struct vertex *g1[10]; 

这里有更多解释:http://iamsoftwareengineer.blogspot.ie/2012/06/c-graph-implementation-with-adjacency.html

🙂