0

Cで基本的なグラフプログラムを書こうとしています。ただし、エラー メッセージが表示され、The arrayOfVertices is undeclared. 私は隣接リスト表現を使用しており、コードは


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

struct graphnode
{
int name;
struct graphnode *next;
};

void addNode(struct graphnode *G[],int startNode, int endNode)
{
// creating a new linked list which is to be added
struct graphnode *tmp;
tmp->name=endNode;
tmp->next=G[startNode];
startNode=tmp;
}

void printGraph(struct graphnode *G[], int numofnodes)
{
int i;
for(i=0;i<numofnodes;i++)
{
    struct graphnode *tmp;
    tmp=G[i];
    printf("%d",i);

    while(tmp!=NULL)
    {
        printf("%d",tmp->name);
        tmp=tmp->next;
    }
}
}

int main(void)
{
int numofnodes;
printf("Enter the number of nodes: ");
scanf("%d",&numofnodes);

// Note that we have created depending upon the size inputted by the user
struct graphnode *arrayOfVertices[numofnodes];
int i;      // for iteration

for(i=0;i<numofnodes;i++)
{
    arrayOfVertices[i]->name=i;
    arrayOfVertices[i]->next=NULL;
}

addNode(arrayOfVertices,0,1);
addNode(aarrayOfVertices,0,2);
printGraph(arrayOfVertices,numofnodes);

return 0;
}

私のアプローチは、ユーザーが入力した数のノードを含む (struct graphnode 型の) 配列を作成することです。構造体には 2 つのフィールドがあり、1 つは数値を含み、もう 1 つはポインターを含みます。


4

1 に答える 1

0
--- graph.c 2012-07-18 21:33:52.405175347 +0200
+++ graph2.c    2012-07-18 21:40:01.150704287 +0200
@@ -1,3 +1,4 @@
+
 #include <stdio.h>
 #include <stdlib.h>

@@ -11,9 +12,10 @@
 {
 // creating a new linked list which is to be added
 struct graphnode *tmp;
+tmp = malloc (sizeof *tmp);
 tmp->name=endNode;
 tmp->next=G[startNode];
-startNode=tmp;
+G[startNode] = tmp;
 }

 void printGraph(struct graphnode *G[], int numofnodes)
@@ -22,13 +24,11 @@
 for(i=0;i<numofnodes;i++)
 {
     struct graphnode *tmp;
-    tmp=G[i];
     printf("%d",i);

-    while(tmp!=NULL)
+    for(tmp = G[i]; tmp; tmp = tmp->next)
     {
         printf("%d",tmp->name);
-        tmp=tmp->next;
     }
 }
 }
@@ -36,21 +36,24 @@
 int main(void)
 {
 int numofnodes;
+int i;
+struct graphnode **arrayOfVertices;
+
 printf("Enter the number of nodes: ");
 scanf("%d",&numofnodes);

 // Note that we have created depending upon the size inputted by the user
-struct graphnode *arrayOfVertices[numofnodes];
-int i;      // for iteration
+arrayOfVertices = malloc ( numofnodes * sizeof *arrayOfVertices);

 for(i=0;i<numofnodes;i++)
 {
+    arrayOfVertices[i] = malloc (sizeof *arrayOfVertices[i] );
     arrayOfVertices[i]->name=i;
     arrayOfVertices[i]->next=NULL;
 }

 addNode(arrayOfVertices,0,1);
-addNode(aarrayOfVertices,0,2);
+addNode(arrayOfVertices,0,2);
 printGraph(arrayOfVertices,numofnodes);

 return 0;

注: 明らかなエラーを見つけただけです。可変サイズの配列を動的に割り当てられた配列に置き換えました。

于 2012-07-18T19:43:13.767 に答える