fbpx

Struktur Data : Implementasi Graph Berarah Tak Berbobot dalam Bahasa C

Pada representasi graph menggunakan adjacency list, setiap node pada graph diasosiasikan dengan kumpulan node lain yang terhubung dengan node tersebut. Dengan kata lain setiap node menyimpan list node lain yang terhubung. Sebagai contoh graph di bawah ini:

Memiliki gambaran representasi adjacency list sebagai berikut:


Kode Program

Berikut ini adalah contoh listing program untuk merepresentasikan graph tersebut.

#include <stdio.h>
#include <stdlib.h>
#define N 6 //misal maksimum node adalah 6
// Struktur data untuk menyimpan adjacency list dari node pada graph
struct Node{
    int dest;
    struct Node* next;
};
typedef struct Node *ptrNode;
//Struktur data untuk menyimpan onjek graph
struct Graph{
// array pointer ke node untuk representasi adjacency list
    ptrNode head[N];
};
typedef struct Graph *ptrGraph;
// Struktur data untuk menyimpan edge graph
struct Edge {
    int src, dest;
};
// Fungsi untuk membuat adjacency list dari edge tertentu
ptrGraph createGraph(struct Edge edges[], int n){
// alokasi memori untuk menyimpan struktur data graph
    ptrGraph graph = (ptrGraph)malloc(sizeof(struct Graph));
// inisialiasi semua pointer head ke null
    for (int i = 0; i < N; i++) {
        graph->head[i] = NULL;
    }
// menambahkan edge satu demi satu
    for (int i = 0; i < n; i++)
    {
        // ambil source dan destination dari node
        int src = edges[i].src;
        int dest = edges[i].dest;
        // buat node baru dari src ke dest
        ptrNode newNode = (ptrNode)malloc(sizeof(structNode));
        newNode->dest = dest;
        // point node baru ke head 
        newNode->next = graph->head[src];
        // point head ke node baru
        graph->head[src] = newNode;
    }
    return graph;
}

// Fungsi print representasi adjacency list
void printGraph(ptrGraph graph){
    int i;
    for (i = 0; i < N; i++){
        // print node dan semua yang terhubung
        ptrNode ptr = graph->head[i];
        while (ptr != NULL){
            printf("(%d -> %d)\t", i, ptr->dest);
            ptr = ptr->next;
        }
        printf("\n");
    }
}

void main() {
    //input array pasangan dari x ke y
    struct Edge edges[] =
    {{ 0, 1 }, { 1, 2 }, { 2, 0 }, { 2, 1 }, { 3, 2 }, { 4, 5}, { 5, 4 }};
    // menghitung jumlah edge
    int n = sizeof(edges)/sizeof(edges[0]);
    // membuat graph
    ptrGraph graph = createGraph(edges, n);
    // print graph
    printGraph(graph);
}

Output

Berikut adalah tampilan ketika program dijalankan:


Materi Lengkap

Silakan baca juga beberapa artikel menarik kami tentang Graph, daftar lengkapnya adalah sebagai berikut.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!
Up