Köşe Ekle
Coddy'nin Graflar - Veri Yapıları Serisi #9 kursunda ders 4 / 14.
Bir köşe (vertex), grafikteki tek bir noktadır. Bir tane eklemek, anahtarını vertices eşlemine (map) boş bir komşu listesiyle kaydetmek anlamına gelir: mevcuttur ancak henüz hiçbir bağlantısı yoktur.
Eğer anahtar zaten eşlemde varsa hiçbir şey yapmayın. Birisi üzerinde iki kez addVertex çağırdı diye bir köşenin mevcut komşularını silmek istemeyiz. Bu tür bir idempotent davranış, yöntemin daha sonra addEdge içerisinden çağrılmasını güvenli hale getirir.
Hadi yazalım.
Görev
KolayGraph sınıfına bir addVertex metodu ekleyin.
Bir tam sayı key alır ve:
- Eğer
key,verticesiçinde değilse, onu boş bir komşu listesiyle ekleyin. - Eğer
keyzatenverticesiçindeyse, hiçbir şey yapmayın.
Kendin dene
#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;
}