/* * Implementação de grafos dirigidos utilizando matriz de adjacências. */ #include typedef struct grafo { int n; /* Número de nós */ int **mat; /* Matriz (a ser alocada dinamicamente) */ } Grafo; void cria_grafo(Grafo* g, int n) { int i; g->mat = calloc (n, sizeof(int*)); for (i = 0; i < n; i++) g->mat = calloc (n, sizeof(int)); g->n = n; } void destroi(Grafo *g) { int i; for (i = 0; i < g->n; i++) free(g->mat[i]); free(g->mat); } void adiciona_aresta(Grafo *g, int v1, int v2) { g->mat[v1][v2] = 1; } int existe_aresta(Grafo *g, int v1, int v2) { return g->mat[v1][v2] == 1; } void remove_aresta(Grafo *g, int v1, int v2) { g->mat[v1][v2] = 0; } /* Deve imprimir grafos no seguinte formato: Grafo dirigido 0 ----> 1 --->2 ^ ^ | | 4 <-----3<----5 E = {<0,1>,<1,2><3,1>,<4,0>,<5,3>} */ void imprime_grafo(Grafo *g) { } int main() { Grafo g; cria_grafo(&g, 6); adiciona_aresta(&g,0,1); adiciona_aresta(&g,1,2); adiciona_aresta(&g,3,1); adiciona_aresta(&g,4,0); adiciona_aresta(&g,5,3); return 0; }