-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgrafo2.c
100 lines (78 loc) · 1.81 KB
/
grafo2.c
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
#include <stdio.h>
#include <stdlib.h>
typedef struct nodalista no;
typedef struct listaadj lista;
typedef struct grafo grafo;
struct nodalista
{
int dest;
struct nodalista* next;
};
struct listaadj
{
struct nodalista *head;
};
struct grafo
{
int V;
struct listaadj* array;
};
no* novo_no(int dest)
{
no* newNode =
(no*) malloc(sizeof(no));
newNode->dest = dest;
newNode->next = NULL;
return newNode;
}
grafo* criar_grafo(int V)
{
grafo* grafo = malloc(sizeof(grafo));
grafo->V = V;
// Create an array of adjacency lists. Size of
// array will be V
grafo->array = (lista*) malloc(V * sizeof(lista));
// Initialize each adjacency list as empty by
// making head as NULL
int i;
for (i = 0; i < V; ++i)
grafo->array[i].head = NULL;
return grafo;
}
void addEdge(grafo* grafo, int inicio, int destino)
{
no* newNode = novo_no(destino);
newNode->next = grafo->array[inicio].head;
grafo->array[inicio].head = newNode;
}
void printgrafo(grafo* grafo)
{
int v;
for (v = 0; v < grafo->V; ++v)
{
no* aux = grafo->array[v].head;
while (aux)
{
printf("-> %d", aux->dest);
aux = aux->next;
}
printf("\n");
}
}
// Driver program to test above functions
int main()
{
// create the grafo given in above fugure
int V = 5;
grafo* grafo = criar_grafo(V);
addEdge(grafo, 0, 1);
addEdge(grafo, 0, 4);
addEdge(grafo, 1, 2);
addEdge(grafo, 1, 3);
addEdge(grafo, 1, 4);
addEdge(grafo, 2, 3);
addEdge(grafo, 3, 4);
// print the adjacency list representation of the above grafo
printgrafo(grafo);
return 0;
}