1

グラフの隣接リスト表現を使用して、深さ優先検索アルゴリズムを実装しようとしています。これが私のコードです:

#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」出力の印刷の最後に、プログラムが予期せず停止することです。理由がわかりません。これで私を助けてもらえますか?

4

1 に答える 1

4

わかった!小さな間違いがあります..

メイン関数では、g1 の宣言は次のようにする必要があります。

struct vertex g1[10];

それ以外の

struct vertex *g1[10];

詳細はこちら: http://iamsoftwareengineer.blogspot.ie/2012/06/c-graph-implementation-with-adjacency.html

:)

于 2012-06-26T09:06:50.613 に答える