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.
Desafio
FácilAdicione um método addVertex à classe Graph.
Ele recebe um inteiro key e:
- Se
keynão estiver emvertices, adicione-o com uma lista de vizinhos vazia. - Se
keyjá estiver emvertices, 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
2Projeto de Grafo
Classe GrafoAdicionar VérticeAdicionar ArestaPossui ArestaObter VizinhosRemover ArestaTamanho