c - 图 C 实现 - 深度优先搜索

标签 c graph structure depth-first-search

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

#include<stdio.h>
#include<stdlib.h>
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<*vertexCount;i++)
{
    printf("%d(%d)",i,g[i].vertexKey);
    e=g[i].edgePtr;
    while(e)
    {
        printf("->%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];

More explanation here: http://iamsoftwareengineer.blogspot.ie/2012/06/c-graph-implementation-with-adjacency.html

:)

关于c - 图 C 实现 - 深度优先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175108/

相关文章:

algorithm - 模糊图自同构群成员测试

c - 二叉树 - 指针作为参数

c++ - 读取二进制数据问题

c - 获取文件大小而不读取文件

c - 在 C 中调用 crypt 函数时出现段错误

algorithm - 带权重的 Karger 算法

java - 仅使用深度优先搜索获取相邻顶点

django - 有没有Django项目结构/信息流可视化的工具?

c++ - 访问类中的结构成员

c - 从C中的字符串中提取最后4个字符