/*
 * Implementação de grafos dirigidos utilizando matriz de adjacências.
 */

#include <stdlib.h>

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;
}