Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Escreva aqui os includes e defines necessarios
- #define VERT_TOT 9
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // Considere que sao 10 vertices
- // Prototipo das funcoes criadas por voce
- typedef struct graph Graph;
- typedef struct node Node;
- typedef struct edges Edges;
- struct graph {
- Node* v[VERT_TOT];
- };
- struct node {
- int vf;
- float peso;
- Node* prox;
- };
- struct edges {
- int vet_i;
- int vet_f;
- float peso;
- };
- Graph* criaGraph(int qtd);
- void montaGrafo(Graph* g, Edges* n , int vet);
- Node* insereNo(Node* lst,int vf, float peso);
- void imprime(Graph* lst, int qtd);
- float somaPesos(Graph* g, int qtd, int vF);
- void liberaNodes(Graph* g, int qtd);
- // Funcao main
- int main(void) {
- // Abaixo as arestas para usar no seu programa, considerando 10 vertices:
- 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
- Graph* g = criaGraph(VERT_TOT);
- if (g == NULL) {
- printf("Erro de alocação de memoria em graph !");
- return(1);
- }
- montaGrafo(g,edge1, VERT_TOT);
- imprime(g, VERT_TOT);
- float somaDosPesos = somaPesos(g, VERT_TOT, 1);
- printf("Soma -> %.2f", somaDosPesos);
- free(g, VERT_TOT);
- return 0;
- }
- // Funcoes criadas por voce
- Graph* criaGraph(int qtd) {
- Graph* p;
- p = (Graph*)malloc(sizeof(Graph) );
- if (p == NULL ) return NULL;
- for (int i = 0; i < qtd; i ++) {
- p->v[i] = NULL;
- }
- return p;
- }
- void montaGrafo(Graph* g, Edges* edge, int qtdAr) {
- int i, vI, vF;
- float peso;
- for (int i = 0; i < qtdAr; i++) {
- vI = edge[i].vet_i;
- vF = edge[i].vet_f;
- peso = edge[i].peso;
- g->v[vI] = insereNo(g->v[vI], vF, peso);
- printf("criou algum no %d\n", i);
- }
- }
- Node* insereNo(Node* lst, int vf, float peso) {
- Node* p = (Node*)malloc(sizeof(Node) );
- if (p == NULL) exit(1);
- p->vf = vf;
- p->peso = peso;
- p->prox = lst;
- return p;
- }
- void imprime(Graph* lst, int qtd) {
- Node* p ;
- for (int i = 0; i < qtd; i++) {
- for (p = lst->v[i]; p != NULL; p = p->prox) {
- printf("(%d -> %d, %.2f) ", i , p->vf , p->peso );
- }
- }
- }
- float somaPesos(Graph* g, int qtd, int vF) {
- float soma=0;
- Node* p;
- for (int i = 0; i < qtd; i++) {
- for (p = g->v[i]; p != NULL; p = p->prox) {
- printf(" ->%d\n", p->vf );
- if (p->vf == vF) {
- soma += p->peso;
- printf("entrou no if");
- }
- }
- }
- return soma;
- }
- void liberaNodes(Graph* g, int qtd) {
- Node* p, * temp;
- for (int i = 0; i < qtd; i++) {
- p = g->v[i];
- while (p = !NULL) {
- temp = p->prox;
- free(p);
- p = temp;
- }
- }
- }
Add Comment
Please, Sign In to add comment