MirandaWopps

P2

Jul 7th, 2022 (edited)
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.64 KB | None | 0 0
  1. // Escreva aqui os includes e defines necessarios
  2. #define VERT_TOT 9
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. // Considere que sao 10 vertices
  7. // Prototipo das funcoes criadas por voce
  8. typedef struct graph Graph;
  9. typedef struct node Node;
  10. typedef struct edges Edges;
  11.  
  12. struct graph {
  13.     Node* v[VERT_TOT];
  14. };
  15.  
  16. struct node {
  17.     int vf;
  18.     float peso;
  19.     Node* prox;
  20. };
  21.  
  22. struct edges {
  23.     int vet_i;
  24.     int vet_f;
  25.     float peso;
  26. };
  27.  
  28.  
  29. Graph* criaGraph(int qtd);
  30. void montaGrafo(Graph* g, Edges* n , int vet);
  31. Node* insereNo(Node* lst,int vf, float peso);
  32. void imprime(Graph* lst, int qtd);
  33. float somaPesos(Graph* g, int qtd, int vF);
  34. void liberaNodes(Graph* g, int qtd);
  35.  
  36. // Funcao main
  37. int main(void) {
  38.     // Abaixo as arestas para usar no seu programa, considerando 10 vertices:
  39.     Edges edge1[] = {  { 0, 1, 0.3 }, { 1,2,0.8 }, { 2,1,0.5 }, { 3,1,0.7 }, { 6,5,0.5 }, { 2,0,0.4 }, { 4,2,1.0 }, { 8,9,0.4 }, { 7,9,0.3 }  };   //Se eu deixo essa linha da erro
  40.     Graph* g = criaGraph(VERT_TOT);
  41.     if (g == NULL) {
  42.         printf("Erro de alocação de memoria em graph !");
  43.         return(1);
  44.     }
  45.  
  46.     montaGrafo(g,edge1, VERT_TOT);
  47.  
  48.     imprime(g, VERT_TOT);
  49.  
  50.     float somaDosPesos = somaPesos(g, VERT_TOT, 1);
  51.     printf("Soma -> %.2f", somaDosPesos);
  52.  
  53.     free(g, VERT_TOT);
  54.     return 0;
  55. }
  56.  
  57. // Funcoes criadas por voce
  58. Graph* criaGraph(int qtd) {
  59.     Graph* p;
  60.     p = (Graph*)malloc(sizeof(Graph) );
  61.     if (p == NULL ) return NULL;
  62.  
  63.     for (int i = 0; i < qtd; i ++) {
  64.         p->v[i] = NULL;
  65.     }
  66.     return p;
  67. }
  68.  
  69. void montaGrafo(Graph* g, Edges* edge, int qtdAr) {    
  70.     int i, vI, vF;
  71.     float peso;
  72.  
  73.     for (int i = 0; i < qtdAr; i++) {  
  74.         vI = edge[i].vet_i;
  75.         vF = edge[i].vet_f;
  76.         peso = edge[i].peso;
  77.         g->v[vI] = insereNo(g->v[vI], vF, peso);
  78.         printf("criou algum no %d\n", i);
  79.     }
  80.  
  81. }
  82.  
  83. Node* insereNo(Node* lst, int vf, float peso) {
  84.     Node* p = (Node*)malloc(sizeof(Node) );
  85.     if (p == NULL) exit(1);
  86.  
  87.     p->vf = vf;
  88.     p->peso = peso;
  89.     p->prox = lst;
  90.  
  91.     return p;
  92. }
  93.  
  94. void imprime(Graph* lst, int qtd) {
  95.     Node* p ;
  96.     for (int i = 0; i < qtd; i++) {
  97.         for (p = lst->v[i]; p != NULL; p = p->prox) {
  98.             printf("(%d -> %d, %.2f)   ", i , p->vf , p->peso );
  99.         }
  100.     }
  101. }
  102.  
  103. float somaPesos(Graph* g, int qtd, int vF) {
  104.     float soma=0;
  105.     Node* p;
  106.  
  107.     for (int i = 0; i < qtd; i++) {
  108.         for (p = g->v[i]; p != NULL; p = p->prox) {
  109.             printf(" ->%d\n", p->vf );
  110.             if (p->vf == vF) {
  111.                 soma += p->peso;
  112.                 printf("entrou no if");
  113.             }
  114.         }
  115.     }
  116.  
  117.     return soma;
  118. }
  119.  
  120. void liberaNodes(Graph* g, int qtd) {
  121.     Node* p, * temp;
  122.  
  123.     for (int i = 0; i < qtd; i++) {
  124.         p = g->v[i];
  125.         while (p = !NULL) {
  126.             temp = p->prox;
  127.             free(p);
  128.             p = temp;
  129.         }
  130.     }
  131. }
  132.  
Add Comment
Please, Sign In to add comment