/*********************************************************** * Created: Sun 07 Jul 2019 02:25:17 PM -03 * * Author: Carla N. Lintzmayer, carla.negri@ufabc.edu.br * ***********************************************************/ #include #include #include "grafo.h" struct grafo { int n; int m; int **matriz_adj; }; grafo_t* cria_grafo(int n, int m) { grafo_t* G = malloc(sizeof(grafo_t)); G->n = n; G->m = m; G->matriz_adj = malloc(n * sizeof(int*)); for (int u = 0; u < n; u++) { G->matriz_adj[u] = malloc(n * sizeof(int)); for (int v = 0; v < n; v++) G->matriz_adj[u][v] = 0; } return G; } void adiciona_aresta(grafo_t *G, int u, int v, int custo) { /* Vertice u eh vizinho do v */ G->matriz_adj[v][u] = 1; /* Vertice v eh vizinho do u */ G->matriz_adj[u][v] = 1; } void imprime_grafo(grafo_t *G) { /* Para cada vertice u, imprime os vizinhos dele */ for (int u = 0; u < G->n; u++) { printf("%d:", u); for (int v = 0; v < G->n; v++) { if (G->matriz_adj[u][v]) printf(" %d", v); } printf("\n"); } } void deleta_grafo(grafo_t *G) { /* Libera memoria que foi alocada */ for (int u = 0; u < G->n; u++) { free(G->matriz_adj[u]); } free(G->matriz_adj); free(G); } int grau_vertice(grafo_t *G, int u) { int grau = 0; /* Testa se algum outro vertice eh vizinho de u */ for (int v = 0; v < G->n; v++) { if (G->matriz_adj[u][v]) { grau++; } } return grau; }