Pesquisar na Comunidade
Mostrando resultados para as tags ''grafos''.
Encontrado 5 registros
-
Olá a todos, preciso de alguma forma de contar as ligações de um grafo em listas de adjacências em C. No entanto eu gostaria de diferenciar, por exemplo, a ligação 3 1 da ligação 13 . Ou seja, as duas são as mesmas, e eu gostaria de contá-las apenas uma vez. Espero que tenham entendido a dúvida, qualquer coisa esclareço aqui. Obrigado.
-
Olá! Estou fazendo um trabalho da faculdade e tenho que implementar grafos por lista de adjacencia. Tenho um método que verifica se existe uma aresta entre dois vertices, porém está dando erro de compilacao, segue o código abaixo: Structs: typedef struct taresta { int vdest; TipoPeso peso; struct taresta * prox; } TipoAresta; typedef TipoAresta* TipoApontador; typedef struct { TipoApontador *listaAdj; int numVertices; int numArestas; } TipoGrafo; Método: bool existeAresta(int v1, int v2, TipoGrafo *grafo){ TipoApontador *p; p = (TipoApontador*)malloc(sizeof(TipoApontador)); *p = grafo->listaAdj[v1]; //começa a percorrer do inicio da lista de adjacencia de v1 while(p){ if (p->vdest == v2){ //linha que esta dando erro return true; } p = p->prox; //linha que esta dando erro } free(p); return false; } Os erros de compilação que ocorrem são os mesmos: Request for member 'vdest' in '*p', which is of pointer type 'TipoApontador' {aka taresta} (maybe you meant to use '->' ?) Request for member 'prox' in '*p', which is of pointer type 'TipoApontador' {aka taresta} (maybe you meant to use '->' ?) Espero que alguém de ajude a enxergar o erro. Obrigada desde já!!!
- 2 respostas
-
- grafos
- lista encadeada
- (e %d mais)
-
Olá! Estou fazendo um trabalho da faculdade e tenho que implementar grafos por lista de adjacencia. Tenho um método que verifica se existe uma aresta entre dois vertices, porém está dando erro de compilacao, segue o código abaixo: bool existeAresta(int v1, int v2, TipoGrafo *grafo){ TipoApontador *p; p = (TipoApontador*)malloc(sizeof(TipoApontador)); *p = grafo->listaAdj[v1]; while(p){ if (p->vdest == v2){ //linha que esta dando erro return true; } p = p->prox; } free(p); return false; }
-
- grafos
- lista encadeada
- (e %d mais)
-
O codigo fonte: #include <stdio.h> #include <stdlib.h> #include "stddef.h" #include "grafo.h" //inclui os Protótipos //Definição do tipo Grafo struct grafo{ int eh_ponderado; int nro_vertices; int grau_max; int** arestas; float** pesos; int* grau; }; Grafo* cria_Grafo(int nro_vertices, int grau_max, int eh_ponderado){ Grafo *gr; gr = (Grafo*) malloc(sizeof(struct grafo)); if(gr != NULL){ int i; gr->nro_vertices = nro_vertices; gr->grau_max = grau_max; gr->eh_ponderado = (eh_ponderado != 0)?1:0; gr->grau = (int*) calloc(nro_vertices,sizeof(int)); gr->arestas = (int**) malloc(nro_vertices * sizeof(int*)); for(i=0; i<nro_vertices; i++) gr->arestas = (int*) malloc(grau_max * sizeof(int)); if(gr->eh_ponderado){ gr->pesos = (float**) malloc(nro_vertices * sizeof(float*)); for(i=0; i<nro_vertices; i++) gr->pesos = (float*) malloc(grau_max * sizeof(float)); } } return gr; } void libera_Grafo(Grafo* gr){ if(gr != NULL){ int i; for(i=0; i<gr->nro_vertices; i++) free(gr->arestas); free(gr->arestas); if(gr->eh_ponderado){ for(i=0; i<gr->nro_vertices; i++) free(gr->pesos); free(gr->pesos); } free(gr->grau); free(gr); } } int insereAresta(Grafo* gr, int orig, int dest, int eh_digrafo, float peso){ if(gr == NULL) return 0; if(orig < 0 || orig >= gr->nro_vertices) return 0; if(dest < 0 || dest >= gr->nro_vertices) return 0; gr->arestas[orig][gr->grau[orig]] = dest; if(gr->eh_ponderado) gr->pesos[orig][gr->grau[orig]] = peso; gr->grau[orig]++; if(eh_digrafo == 0) insereAresta(gr,dest,orig,1,peso); return 1; } int removeAresta(Grafo* gr, int orig, int dest, int eh_digrafo){ if(gr == NULL) return 0; if(orig < 0 || orig >= gr->nro_vertices) return 0; if(dest < 0 || dest >= gr->nro_vertices) return 0; int i = 0; while(i<gr->grau[orig] && gr->arestas[orig] != dest) i++; if(i == gr->grau[orig])//elemento não encontrado return 0; gr->grau[orig]--; gr->arestas[orig] = gr->arestas[orig][gr->grau[orig]]; if(gr->eh_ponderado) gr->pesos[orig] = gr->pesos[orig][gr->grau[orig]]; if(eh_digrafo == 0) removeAresta(gr,dest,orig,1); return 1; } void imprime_Grafo(Grafo *gr){ if(gr == NULL) return; int i, j; for(i=0; i < gr->nro_vertices; i++){ printf("%d: ", i); for(j=0; j < gr->grau; j++){ if(gr->eh_ponderado) printf("%d(%.2f), ", gr->arestas[j], gr->pesos[j]); else printf("%d, ", gr->arestas[j]); } printf("\n"); } }
-
Olá Pessoal, Eu sou novo no fórum, e novo na linguagem Python. Estou fazendo um programinha que lê um arquivo .txt para obter os dados de um grafo. Efetuada a leitura, eu preciso criar uma matriz de adjacência para ele. a Matriz de adjacência é uma matriz binária que marca com 1 a existência de aresta entre dois vértices do grafo, no qual sua dimenção é n x n, onde n é o número de vértices contidos no grafo. Para criar a criar a matriz de adjacência, iniciei uma matriz preenchendo-a com zeros da seguinte forma: matrizAdjacencia = [[0 for i in range(1,numVertice+1)] for j in range(1,numVertice+1)] Logo em seguida, para ler cada linha do arquivo e gerar a matriz, escrevi o seguinte código: for i in range(1,numAresta+1): str = arquivo.readline() str = str.split() origem = int(str[0]) destino = int(str[1]) distancia = int(str[2]) custo = (str[3]) custo = custo.split('\n') custo = float(custo[0]) matrizAdjacencia[origem][destino] = 1 Porém quando executo o código, exibe o erro : "matrizAdjacencia[origem][destino] = 1 IndexError: list index out of range" Eu imaginei que o erro ocorresse por que o for está em relação ao número de arestas (100) e a inicialização da matriz foi em relação ao número de vértices (40), porém não me parece que estou percorrendo a matriz iniciada, estou apenas acessando os índices, e este erro não parece fazer sentido. Agradeço desde já a todos.
- 7 respostas
-
- matriz
- indexerror
-
(e %d mais)
Tags: