Advertisement
caiooa

06/11/19- estrutura de dados 2

Nov 6th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.25 KB | None | 0 0
  1. grafos/graphs
  2. vértice/vertix
  3. edge/aresta
  4. += "ou"
  5.  
  6. d(G)=|V|+|E|
  7. se tiver muito vértice com pouca conexões, V domina
  8. se tiver muitas arestas com poucos pontos para ligar, E domina
  9.  
  10. 2*|E| -> pois todo E teria 2 extremos, logicamente
  11.  
  12.  
  13. 2 tipos de implementação de grafos
  14.  
  15. 1: matriz de adjacência
  16.     bom se tiverem muitas conexões
  17.     bom se as conexões forem todas na 2 direções-> só precisa guardar metade dos espaçoes
  18.     bom para pesquisar se o vértice A tem conexão com o vértice B
  19.     ruim se precisar saber todas as conexões do vértice A: precisa passar por toda a tabela
  20.    
  21.  
  22. 2: lista encadeada
  23.     bom se tiverem pouca conexões
  24.     bom se as conexões forem unidirecionais
  25.     bom para listar todas as conexões de A
  26.     ruim para procurar se A é ligado a B -> precisa passar por toda a lista encadeada
  27.  
  28.  
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31.  
  32. /*Estrutura para um nó em uma lista encadeada: */
  33. typedef struct noA {
  34.    int id;          /*Identificador armazenado no nó. */
  35.    struct noA *next; /* Próximo nó na lista encadeada. */
  36. } NoA;
  37.  
  38. /*Estrutura de Grafo com lista de adjacências: */
  39. typedef struct grafoA {
  40.    int E; /* Quantidade de arestas. */
  41.    int V; /* Quantidade de vértices. */
  42.    NoA **Adj; /* Lista de adjacências. */
  43. } GrafoA;
  44.  
  45. /*Estrutura de Grafo com matriz de adjacências: */
  46. typedef struct grafoM {
  47.    int E; /* Quantidade de arestas. */
  48.    int V; /* Quantidade de vértices. */
  49.    int **Mat; /* Matrix de adjacências. */
  50. } GrafoM;
  51.  
  52. /*Função para criar um grafo com lista de adjacências.*/
  53. GrafoA* criar_grafo_adj (int tamanho) {
  54.    int v;
  55.    GrafoA *G = (GrafoA *)malloc(sizeof(GrafoA));
  56.    G->E = 0;
  57.    G->V = tamanho;
  58.    G->Adj = (NoA **)malloc(tamanho * sizeof(NoA *));
  59.    for (v = 0; v < G->V; v++) {
  60.       G->Adj[v] = NULL;
  61.    }
  62.    return G;
  63. }
  64.  
  65. /*Função para criar um grafo com matriz de adjacências.*/
  66. GrafoM* criar_grafo_mat (int tamanho)
  67. {
  68.    int v;
  69.    GrafoM *G = (GrafoM *)malloc(sizeof(GrafoM));
  70.    G->E = 0;
  71.    G->V = tamanho;
  72.    G->Mat = (int **)malloc(tamanho * sizeof(int *));
  73.    for (v = 0; v < G->V; v++)
  74.    {
  75.       G->Mat[v] = (int *)malloc(tamanho * sizeof(int));
  76.    }
  77.    return G;
  78. }
  79.  
  80. /*Função para destruir um grafo construído com lista de adjacências.*/
  81. void liberar_grafo_adj (GrafoA *G)
  82. {
  83.    int v;
  84.    for (v = 0; v < G->V; v++)
  85.    {
  86.       if (G->Adj[v] != NULL)
  87.       {
  88.          free(G->Adj[v]);
  89.       }
  90.    }
  91.    free(G->Adj);
  92.    free(G);
  93. }
  94.  
  95. /*Função para destruir um grafo construído com lista de adjacências.*/
  96. void liberar_grafo_mat (GrafoM *G)
  97. {
  98.    int v;
  99.    for (v = 0; v < G->V; v++)
  100.    {
  101.       if (G->Mat[v] != NULL)
  102.       {
  103.          free(G->Mat[v]);
  104.       }
  105.    }
  106.    free(G->Mat);
  107.    free(G);
  108. }
  109.  
  110. void zera_grafo_mat (GrafoM *G)
  111. {
  112.    int v;
  113.    for (v = 0; v < G->V; v++)
  114.    {
  115.       if (G->Mat[v] == NULL)
  116.       {
  117.          G->Mat[v]=0;
  118.       }
  119.    }
  120. }
  121.  
  122. void insere_valor_grafo_mat (GrafoM *G, int x, int y, int valor)
  123. {
  124.    G->Mat[]=valor;
  125. }
  126.  
  127.  
  128.  
  129.  
  130. /* */
  131. int main () {
  132.  
  133.    int Va = 10; /*Número de vértices*/
  134.  
  135.    GrafoA* Ga = criar_grafo_adj (Va);
  136.    
  137.    int Vm = 10; /*Número de vértices*/
  138.  
  139.    GrafoM* Gm = criar_grafo_mat (Vm);
  140.  
  141.    liberar_grafo_adj (Ga);
  142.    liberar_grafo_mat (Gm);
  143.  
  144.    return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement