C++ Linked-List Read-in errors

I have been stuck on this problem for hours will someone please help.

The input is in the following format

5
1 2 9.0
1 3 12.0
2 4 18.0
2 3 6.0
2 5 20.0
3 5 15.0
0
1 5

The first number is the number of vertexes in the graph. Then next lines up to 0 are the edges of the graph. With the first and second numbers being the vertexes and the third being how far the edge is between them. Trying to read in the data and store the edges into there locations in the List adjacency for that vertex. This example would make a graph with five vertexes with edges from 1 to 2&3. 2 to 4&3&1 etc also stores opposites EX. 2 1 9.0.
It is not storing the data correctly. When reading in each new data for each vertex overwrites the previous data. It is storing the data in multiple listCells because when printed out i get

1 3 12.000
1 3 12.000
2 5 20.000
2 5 20.000
2 5 20.000
2 5 20.000
3 5 15.000
3 5 15.000
3 5 15.000
So it is the write number of cells just wrong information.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
    #include <cstdio>
    using namespace std;
    int tracing= 1;
    
    struct ListCell
    {
       ListCell* next;
       int vertex;
       double weight;
    
       ListCell(int v, double w, ListCell* nxt)
       {
          vertex = v;
          weight = w;
          next = nxt;
       }
    };
    
    typedef ListCell* List;
    
    struct Vertex
    {
       bool signaled;
       long distance;
       List adjacency;    
    };
    
    struct Graph
    {
       int     numVertices;
       Vertex* vertexInfo;
    
       Graph(int n)
       {
          numVertices = n;
          vertexInfo  = new Vertex[n+1];
          for(int i = 1; i <= n; i++)
          {
             vertexInfo[i].signaled = false;
          }
       }
    };
    
    //==============================================================
    //                   tail
    //==============================================================
    // 
    //==============================================================
    
       List tail(List L)
       {
          return L->next;
       }
    //==============================================================
    //                   isEmpty
    //==============================================================
    // 
    //==============================================================
    
       bool isEmpty(List L)
       {
          return L == NULL;
       }
    //==============================================================
    //                   readIn
    //==============================================================
    // 
    //==============================================================
    
    Graph readIn()
    {
       int g;
       int p1;
       int p2;
       float edge;
       scanf("%i ", &g);
    
       Graph myGraph(g);
       scanf("%i", &p1);
       while(p1 != 0)
       {
          scanf("%i", &p2);
          scanf("%f", &edge);
    
          if(tracing >0)
          {
             printf("Edge from %i to %i is %5.3f\n", p1, p2, edge);
          }
           
          myGraph.vertexInfo[p1].adjacency = new ListCell 
          (p2,edge,myGraph.vertexInfo[p1].adjacency);
    
    
          myGraph.vertexInfo[p2].adjacency = new ListCell
          (p1, edge, myGraph.vertexInfo[p2].adjacency);
          
          scanf("%i", &p1);
       }
       return myGraph;
    }
    
    //==============================================================
    //                   printOut
    //==============================================================
    // 
    //==============================================================
    
    void printOut(Graph myGraph)
    {  
       int n;
       int length = myGraph.numVertices;
       float d;
       List p;
    
       printf("There are %i vertices.\n", length);
       printf("The edges are as follows. \n\n");
       for(int i=1; i<=length; i++)
       {
          p= myGraph.vertexInfo[i].adjacency;
          for(p=p; !isEmpty(p); p=tail(p))
          {
             n = myGraph.vertexInfo[i].adjacency -> vertex;
             d = myGraph.vertexInfo[i].adjacency -> weight; 
             if(i<n)
             {
                printf("%i %i %7.3f \n",i,n,d);
             }
          }
       }
    }
    //==============================================================
    //                   main
    //==============================================================
    
    int main(int argc, char** argv)
    {
       Graph myGraph = readIn();
       printOut(myGraph);
       return 0;
    }
Topic archived. No new replies allowed.