Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct ponto {
  5. int peso;
  6. int valor_do_vertice;
  7. };typedef struct ponto Ponto;
  8.  
  9. struct celula {
  10. struct celula* prox;
  11. Ponto ponto;
  12. };typedef struct celula Celula;
  13.  
  14. struct lista {
  15. Celula *primeiro,*ultimo;
  16. };typedef struct lista Lista;
  17.  
  18. struct grafo {
  19. Lista *adjacentes;
  20. int numero_de_vertices;
  21. int numero_de_arestas;
  22. };typedef struct grafo Grafo;
  23.  
  24. Ponto* criaPonto (int peso, int valor_do_vertice) {
  25. Ponto *ponto;
  26. ponto->peso = peso;
  27. ponto->valor_do_vertice = valor_do_vertice;
  28. return ponto;
  29. }
  30.  
  31. Celula* criaCelula (Ponto* ponto) {
  32. Celula* celula;
  33. celula->ponto = ponto;
  34. celula->prox = NULL;
  35. }
  36.  
  37. Lista* iniciaLista () {
  38. Lista* lista;
  39. lista->primeiro = NULL;
  40. lista->primeiro->prox = lista->ultimo;
  41. lista->ultimo = lista->primeiro;
  42. return lista;
  43. }
  44.  
  45. int isListaVazia (Lista* lista) {
  46. return lista->primeiro == NULL;
  47. }
  48.  
  49. Lista* procuraCelula(Lista* lista, int valor_do_vertice) {
  50. Celula* p;
  51. if (lista->primeiro->prox == NULL) {
  52. return lista->primeiro;
  53. }
  54. else {
  55. p = lista->primeiro;
  56. while (p->ponto->valor_do_vertice != valor_do_vertice) {
  57. p = p->prox;
  58. }
  59. return p;
  60. }
  61. }
  62.  
  63. void insereNaLista (int peso, int valor_do_vertice, Lista* lista) {
  64. Ponto *ponto;
  65. ponto = criaPonto(peso, valor_do_vertice);
  66. if (isLista(lista)) {
  67. lista->primeiro = malloc(sizeof(Celula));
  68. lista->primeiro = criaCelula(ponto);
  69. lista->ultimo = lista->primeiro;
  70. }
  71. else {
  72. lista->ultimo->prox = malloc(sizeof(Celula));
  73. lista->ultimo->prox = criaCelula(ponto);
  74. lista->ultimo = lista->ultimo->prox;
  75. }
  76. }
  77.  
  78. Lista* excluiUltimaCelula (Lista* lista) {
  79. if (lista->primeiro->prox == NULL) {
  80. lista->primeiro = NULL;
  81. lista->ultimo = lista->primeiro;
  82. return lista;
  83. }
  84. else {
  85. Celula* p, q;
  86. p = Lista->primeiro;
  87. q = p->prox;
  88. while (q->prox != NULL) {
  89. p = q;
  90. q->prox;
  91. }
  92. free(q);
  93. lista->ultimo = p;
  94. return lista;
  95. }
  96. }
  97.  
  98. void esvaziaLista (Lista* lista) {
  99. while (lista->primeiro != NULL) {
  100. excluiUltimaCelula(lista);
  101. }
  102. }
  103.  
  104. Grafo* iniciaGrafo(int numero_de_vertices) {
  105. Grafo* grafo;
  106. grafo->numero_de_arestas = 0;
  107. grafo->numero_de_vertices = numero_de_vertices;
  108. if (numero_de_vertices > 0) {
  109. grafo->adjacentes = malloc(numero_de_vertices * sizeof(Lista));
  110. }
  111. return grafo;
  112. }
  113.  
  114. void alocaMais(Grafo* grafo) {
  115. grafo->adjacentes = realloc(grafo->adjacentes, (grafo->numero_de_vertices*2)*sizeof(Lista));
  116. }
  117.  
  118. void esvaziaGrafo(Grafo* grafo) {
  119. int contador;
  120. for (i = 0; contador < grafo->numero_de_vertices; contador++) {
  121. esvaziaLista(grafo->adjacentes);
  122. }
  123. }
  124.  
  125. void insereAresta(int vertice1, int vertice2, int peso, Grafo* grafo) {
  126. insereNaLista(peso, vertice2, grafo->adjacentes[vertice1]);
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement