Menu
CoddyTech

Tambahkan Simpul

Pelajaran 4 dari 14 dalam kursus Graf, Seri Struktur Data #9 di Coddy.

Sebuah verteks adalah satu titik dalam graf. Menambahkannya berarti mendaftarkan kuncinya di map vertices dengan daftar tetangga kosong: verteks itu ada, tetapi belum memiliki koneksi.

Jika kuncinya sudah ada di map, jangan lakukan apa pun. Kita tidak ingin menghapus tetangga yang sudah dimiliki verteks hanya karena seseorang memanggil addVertex padanya dua kali. Perilaku idempoten seperti ini membuat method tersebut aman dipanggil dari addEdge nanti.

Mari kita tulis.

challenge icon

Tantangan

Mudah

Tambahkan method addVertex ke class Graph.

Method ini menerima integer key dan:

  • Jika key tidak ada di vertices, tambahkan key dengan list tetangga yang kosong.
  • Jika key sudah ada di vertices, jangan lakukan apa pun.

Coba sendiri

#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;
}

Semua pelajaran di Graf, Seri Struktur Data #9

Latihan sendiri: Compiler C online