Menu
Coddy logo textTech

Adicionar Vértice

Lição 4 de 14 do curso Grafos - Série de Estruturas de Dados #9 da Coddy.

Um vértice é um ponto único no grafo. Adicionar um significa registrar sua chave no mapa vertices com uma lista de vizinhos vazia: ele existe, mas ainda não possui conexões.

Se a chave já estiver no mapa, não faça nada. Não queremos apagar os vizinhos existentes de um vértice apenas porque alguém chamou addVertex nele duas vezes. Esse tipo de comportamento idempotente torna o método seguro para ser chamado a partir de addEdge mais tarde.

Vamos escrevê-lo.

challenge icon

Desafio

Fácil

Adicione um método addVertex à classe Graph.

Ele recebe um inteiro key e:

  • Se key não estiver em vertices, adicione-o com uma lista de vizinhos vazia.
  • Se key já estiver em vertices, não faça nada.

Experimente você mesmo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "graph.h"

static int _cmp_int(const void* a, const void* b) {
    int ai = *(const int*)a, bi = *(const int*)b;
    return (ai > bi) - (ai < bi);
}

int main() {
    Graph g;
    Graph_init(&g);
    char line[1024];
    while (fgets(line, sizeof(line), stdin)) {
        line[strcspn(line, "\r\n")] = '\0';
        char* cmd = strtok(line, " \t");
        if (!cmd) continue;
        if (strcmp(cmd, "verticesEmpty") == 0) { printf("%s\n", g.vertexCount == 0 ? "true" : "false"); }
        if (strcmp(cmd, "hasVertex") == 0) { char* arg = strtok(NULL, " \t"); if (arg) printf("%s\n", Graph_indexOf(&g, atoi(arg)) != -1 ? "true" : "false"); }
        if (strcmp(cmd, "addVertex") == 0) { char* arg = strtok(NULL, " \t"); if (arg) Graph_addVertex(&g, atoi(arg)); }
    }
    return 0;
}

Todas as lições de Grafos - Série de Estruturas de Dados #9