Logo Passei Direto
Buscar

analise_funcoes_grafo

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Análise Detalhada Função por Função - grafo.c
Função: criar_grafo()
Função: criar_grafo()
----------------------
Esta função aloca dinamicamente memória para um novo grafo e inicializa seus campos.
Código e Explicação:
1. Grafo* g = (Grafo*)malloc(sizeof(Grafo));
 -> Aloca memória para um objeto do tipo Grafo.
2. if (!g) return NULL;
 -> Verifica se a alocação falhou; retorna NULL em caso de erro.
3. g->lista_vertices = NULL;
 -> Inicializa o ponteiro de lista de vértices como NULL (grafo vazio).
4. return g;
 -> Retorna o ponteiro para o novo grafo criado.
Função: buscar_vertice()
Função: buscar_vertice()
-------------------------
Busca um vértice na lista de vértices com base no seu id.
1. if (!g || !id) return NULL;
 -> Verifica se o grafo ou o ID são inválidos.
2. Vertice* atual = g->lista_vertices;
 -> Inicializa um ponteiro para percorrer a lista.
3. while (atual) {
 if (strcmp(atual->id, id) == 0)
 return atual;
 atual = atual->prox;
 }
 -> Percorre a lista de vértices e compara os IDs.
 -> Retorna o vértice correspondente, se encontrado.
4. return NULL;
 -> Se não encontrar, retorna NULL.
Função: adicionar_vertice()
Função: adicionar_vertice()
----------------------------
Adiciona um novo vértice ao grafo se ainda não existir.
1. if (!g || !id || buscar_vertice(g, id)) return NULL;
 -> Verifica validade do grafo e do ID, e se o vértice já existe.
2. Vertice* novo = (Vertice*)malloc(sizeof(Vertice));
 -> Aloca memória para o novo vértice.
3. if (!novo) return NULL;
 -> Verifica erro de alocação.
4. strcpy(novo->id, id);
 -> Copia o ID para o campo do vértice.
5. novo->lista_adj = NULL;
 -> Inicializa lista de adjacência.
6. novo->prox = g->lista_vertices;
 -> Insere o vértice no início da lista de vértices.
7. g->lista_vertices = novo;
 -> Atualiza o ponteiro principal do grafo.
8. return novo;
 -> Retorna o novo vértice criado.
Função: adicionar_aresta()
Função: adicionar_aresta()
----------------------------
Adiciona uma aresta entre dois vértices.
1. if (!g || !origem || !destino || !conteudo) return 0;
 -> Validação de parâmetros.
2. Vertice* v_origem = buscar_vertice(g, origem);
 -> Busca o vértice de origem.
3. if (!v_origem) v_origem = adicionar_vertice(g, origem);
 -> Cria o vértice se não existir.
4. Aresta* a = v_origem->lista_adj;
 -> Inicia a verificação de arestas já existentes.
5. while (a) {
 if (strcmp(a->destino, destino) == 0) return 0;
 a = a->prox;
 }
 -> Evita duplicação de arestas.
6. Aresta* nova = (Aresta*)malloc(sizeof(Aresta));
 -> Aloca nova aresta.
7. strcpy(nova->destino, destino);
 -> Define destino da aresta.
8. strcpy(nova->conteudo, conteudo);
 -> Define o conteúdo.
9. nova->prox = v_origem->lista_adj;
 -> Insere a aresta no início da lista.
10. v_origem->lista_adj = nova;
 -> Atualiza o ponteiro do vértice.
11. return 1;
 -> Sucesso.

Mais conteúdos dessa disciplina