1 /* The data structure/ ADT for the edge-list */
6 /*extern VerticesListType graph; */
9 EdgeListType * InitEdgeList(int E)
11 EdgeListType * edgesRec;
13 edgesRec = (EdgeListType *) malloc(sizeof(EdgeListType));
16 edgesRec->edges = (Edge *) malloc(E*sizeof(Edge));
17 _MEMCHECK(edgesRec->edges);
21 void addEdge(VerticesListType *graph, EdgeListType * EdgeList, int v, int w)
27 /* printf("adding edge: (%d, %d)\n", v, w); */
28 ((EdgeList->edges)[n]).node1 = v;
29 (EdgeList->edges[n]).node2 = w;
30 index = graph->vertexArray[v].next++;
31 graph->adjArray[ index ] = w;
32 index = graph->vertexArray[w].next++;
33 graph->adjArray[ index ] = v;
35 graph->vertexArray[v].degree++;
36 graph->vertexArray[w].degree++;
39 void printEdges(EdgeListType *EdgeList)
43 edges = EdgeList->edges;
44 for (i=0; i< (EdgeList->next ); i++)
45 {printf("%d\t%d\n", edges[i].node1, edges[i].node2);
49 int edgeExists(VerticesListType *graph, int x, int y)
52 ind = graph->vertexArray[x].adjListInd;
54 for(i=0; i< graph->vertexArray[x].degree; i++)
55 { if (graph->adjArray[ind + i] == y) return 1;}
61 If we are adding an edge between two nodes already connected then we
62 need special changes. We open some distinct edge say x,y and
63 connect v with y and x with w
66 void addspEdge(VerticesListType *graph, EdgeListType * EdgeList, int v, int w)
68 int n, index,i,x,y,ind;
72 /* printf("adding edge: (%d, %d)\n", v, w); */
73 /*((EdgeList->edges)[n]).node1 = v;*/
74 /*(EdgeList->edges[n]).node2 = w;*/
76 if (((EdgeList->edges[i]).node1!=v) && ((EdgeList->edges[i]).node2!=w))
78 x=(EdgeList->edges[i]).node1;
79 y=(EdgeList->edges[i]).node2;
80 (EdgeList->edges[i]).node2=w;
81 (EdgeList->edges[n]).node1=v;
82 (EdgeList->edges[n]).node2=y;
85 ind = graph->vertexArray[x].adjListInd;
86 for(i=0; i< graph->vertexArray[x].degree; i++)
87 { if (graph->adjArray[ind + i] == y) graph->adjArray[ind+i]=w;}
89 ind = graph->vertexArray[y].adjListInd;
90 for(i=0; i< graph->vertexArray[y].degree; i++)
91 { if (graph->adjArray[ind + i] == x) graph->adjArray[ind+i]=y;}
93 index = graph->vertexArray[v].next++;
94 graph->adjArray[ index ] = y;
95 index = graph->vertexArray[w].next++;
96 graph->adjArray[ index ] = x;
97 graph->vertexArray[v].degree++;
98 graph->vertexArray[w].degree++;