Anda di halaman 1dari 20

Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Modul Praktikum
10S2101 – Algoritma dan Struktur Data (Prodi S1 SI dan TE)

Graph ADT

Minggu : 13
Tanggal : 15 November 2021
Tujuan :  Mampu menjelaskan definisi formal graf dan properties
nya.
 Mampu memberikan contoh – contoh penerapan graf
untuk menyelesaikan masalah komputasi.
 Mampu menggambarkan implementasi graf dengan
matriks dan lis kedekatan.
 Mampu menulis program Graph ADT dengan
representasi matriks dan lis kedekatan.
Setoran : Lembar jawaban dan program (via e-course)
Waktu penyetoran : 21 November 2021 Pukul 22:00

Petunjuk Praktikum
1. Anda mengerjakan praktikum ini secara berkelompok dengan maksimum 3 mahasiswa
per kelompok.
2. Tugas dikerjakan dalam kelompok masing-masing. Tindakan-tindakan plagiarisme, jika
terbukti dapat menyebabkan pemberian sanksi akademik ke mahasiswa/ kelompok yang
terlibat.

Referensi
1. T.H. Cormen, C.E. Leiserson, R.L. Rivest and C. Stein, Introduction to Algorithm 3rd
eds., MIT Press 2009.
2. M.A. Weiss, Data Structures and Algorithm Analysis in C, 2nd Eds., Addison-Wesley,
1997.

Bagian 1: Essai
1. Berikanlah definisi formal dari graf, graf berarah, dan graf tidak berarah.
2. Jelaskan properties/karakteristik graf berikut ini:
a) Path atau lintasan
b) Cycle atau siklus
c) Connected dan strongly connected graph
d) Complete graph
e) Dense and sparse graph
3. Berikan contoh penerapan graf untuk memodelkan objek-objek berikut. Sebukan apa yang
menjadi simpul, busur, serta berikan contoh lintasan:
a) Jaringan komputer
b) Perangkat lunak

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 1 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

c) Peta
d) Jaringan saraf buatan (artificial neural network) dalam bidang kecerdasan buatan.

4. Di bawah ini diberikan gambar graf berarah.


5
1 2 1 5
5
3 4
0
3 6
5 1
2
2 4
4 3
7

a) Tentukan:
i. jumlah simpul dan jumlah busur;
ii. apakah graf tersebut merupakan graf rapat (dense graph), jelaskan jawaban
anda;
iii. apakah graf tersebut merupakan graf siklus (cyclic graph);
iv. 2 buah lintasan pada graf dimana jumlah simpul pada lintasan > 3.
b) Gambarkan diagram implementasi matriks kedekatan untuk graf tersebut.
c) Gambarkan pula diagram implementasi lis kedekatan untuk graf tersebut.
d) Jelaskanlah implementasi graf mana yang paling efisien.

Bagian 2: Pemrograman
 Implementasi graf dengan adjacency matrix (matriks kedekatan)
Pada bagian ini, anda akan membuat struktur data graf dengan matriks kedekatan.
Representasi ini sangat baik untuk graf padat (dense graph) atau pun complete graph serta
sederhana. Pada no. 2, anda akan menggunakan lis kedekatan (adjacency list),
representasi yang baik untuk graf renggang/jarang (sparse graph).
 Antarmuka: graph_adjmatrix.h diberikan oleh kode di halaman berikut.
Antarmuka menggunakan penyertaan kondisional (conditional inclusion). Pernyataan
baris ke-8 memberikan deklarasi generik untuk Graph ADT (struct GraphADT)
sehingga graf dapat direpresentasikan sesuai dengan kebutuhan. Pernyataan baris ke-9
dan ke-10 membuat definisi tipe data berupa pointer ke struct GraphADT. Tipe
data Graph (baris ke-10) merupakan tipe data yang akan digunakan untuk deklarasi
dan alokasi memori graf matriks kedekatan. Nama – nama fungsi telah dibuat
sedemikian sehingga anda memahami tugas dari setiap fungsi. Misalnya, NumNodes,
merupakan fungsi yang dipanggil untuk mengembalikan jumlah simpul (number of
nodes). Fungsi Predecessors – dengan tipe kembalian array/pointer bertipe
unsigned int – bertugas untuk mengembalikan semua simpul pendahulu
(predecessors) dari suatu simpul (simpul dengan label/id n di parameter ke-2).

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 2 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Demikian juga dengan fungsi-fungsi yang lain dapat anda pahami dari namanya. Ini
adalah praktek yang baik.

 Implementasi/definisi dari struct GraphADT diberikan oleh kode di bawah ini.


Berkas implementasi disimpan sebagai graph_adjmatrix.c.

Pada struktur di atas, matriks kedekatan direpresentasikan oleh matriks dimensi 2 pada
baris ke-11 yang akan dialokasikan secara dinamik: variabel adjmatrix yang
merupakan pointer ganda (double indirection pointer). Varibel V menampung jumlah
simpul dan E, jumlah busur pada graf.
 Fungsi ConstructGraph ditunjukkan oleh kode di halaman selanjutnya. Parameter
fungsi adalah g dan V yang masing-masing menunjukkan graf dan jumlah simpul.
Dengan demikian, konstruksi graf menggunakan matriks kedekatan memiliki
keterbatasan jumlah simpul maksimum yang dapat ditampung graf. Konstruksi
dimulai dengan alokasi memori Graph ADT yang diwakili oleh parameter g bertipe

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 3 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Graph – lihat antarmuka Graph merupakan pointer ke struct GraphADT.


Sebelum alokasi dilakukan, pernyataan baris ke-15 memeriksa apakah g bernilai
NULL atau belum ada, jika NULL maka dilakukan alokasi memori. Selanjutnya
diset/ditugaskan jumlah simpul ke anggota variabel V (g->V) sebanyak simpul yang
ada di parameter, dan g->E (atau jumlah busur) masih 0 (nol) sebab belum ada busur
di graf.
Pernyataan baris ke-21 s/d 32 melakukan alokasi memori untuk matriks kedekatan
berdimensi 2 dengan teknik pointer tak langsung ganda (double indirection pointer).
Jumlah baris dan kolom sama dengan jumlah simpul graf. Baris menunjukkan simpul
sumber (start) dan kolom sebagai simpul tujuan (end). Alokasi memori dilakukan
sebagai berikut:
a. Pernyataan baris ke-21 mengalokasikan memori untuk pointer ke baris data.
Oleh sebab itu, tipe kembalian adalah double indirection (ElementType
**) dan memori yang dialokasikan adalah untuk pointer tunggal atau single
indirection (ElementType *). Juga dilakukan pengecekan apakah
memori tersedia (baris ke-22 s/d 25).

b. Pernyataan baris ke-26 s/d 32 mengalokasikan memori untuk setiap baris data
dengan perulangan sebanyak V kali. Artinya, untuk setiap single indirection
pointer (Element Type *) yang telah dialokasikan di pernyataan baris ke-
21, dilakukan alokasi memori untuk menampung data bertipe ElementType
sejumlah V. Juga dilakukan pengecekan ketersediaan memori oleh pernyataan
baris ke-28 s/d 30.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 4 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Langkah terakhir dalam konstruksi graf adalah menginisiasi semua busur antara
simpul yang berbeda (distinct nodes) tidak ada. Pada konstruksi graf tersebut, tidak
ada busur ditandai dengan bobot/weight bernilai tak hingga yang diasumsikan sebesar
nilai maksimal bilangan bulat positif tak bertanda (unsigned int) kurang 1000
(UINT_MAX-1000). Busur dari simpul yang identik, diberi nilai 0 (nol). Anda harus
menyertakan <limits.h> agar dapat menggunakan UINT_MAX. Jika anda
menggunakan graf tanpa bobot/ bobot sama (graph with equal weight), anda
dapat menugaskan angka 0 untuk menunjukkan tidak ada busur dan angka 1
untuk menunjukkan ada busur.
 Operasi untuk menambah busur dilakukan dengan menugaskan nilai cell dari
matriks dimensi 2 dengan bobot busur, dimana indeks baris matriks menunjukkan
simpul sumber (start/ predecessor) dan indeks kolom matriks sebagai simpul tujuan
(end/ successor). Operasi di ditunjukkan oleh fungsi AddEdge yang kodenya
diberikan di bawah ini. Ketika busur ditambahkan maka jumlah busur juga bertambah
1 (di-increment) sebagaimana ditunjukkan oleh pernyataan baris ke-48. Sebaliknya,
operasi menghapus busur dilakukan dengan menugaskan nilai cell sebesar
UINT_MAX-1000, sebagai penanda bahwa tidak ada busur antara simpul yang
ditunjukkan oleh indeks baris ke simpul yang ditunjukkan oleh indeks kolom. Ketika
busur dihapus, maka jumlah busur juga berkurang 1 (di-decrement).

 Fungsi untuk mengembalikan jumlah simpul dan busur merupakan fungsi sederhana
dan ditunjukkan oleh kode di bawah ini.

Kode di halaman berikut menunjukkan fungsi untuk mengambil jumlah simpul


pendahulu, yakni fungsi NumPredecessors. Parameter fungsi adalah g yang
menampung graf dan n yang menampung label/ identitas simpul. Jika diberikan
simpul n, pendahulu/ predecessors simpul n adalah semua simpul yang

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 5 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

mempunyai busur (bukan lintasan) menuju n. Baca komentar yang diberikan untuk
memahami cara kerja fungsi.

 Fungsi Predecessors ditunjukkan oleh kode program di bawah ini. Parameter


fungsi adalah g yang menampung graf dan n yang menampung label/ identitas simpul.
Fungsi bertugas untuk mengembalikan semua pendahulu/ predecessors dari simpul n.
Fungsi ini mengembalikan array yang diwakili oleh pointer ke memori bertipe
unsigned int (unsigned int *). Pointer tipe ini digunakan karena array
akan menampung semua label/ identitas simpul pendahulu n. Identitas simpul
pendahulu direpresentasikan oleh indeks baris matriks. Indeks matriks bernilai 0, 1,
... V; V adalah jumlah simpul, oleh karena itu bertipe unsigned int. Baca
komentar yang diberikan agar anda paham cara kerja fungsi.

 Fungsi untuk mencari jumlah penerus (succesor) ditunjukkan oleh fungsi


NumSuccessors di halaman berikut. Parameter fungsi adalah g yang menampung
graf dan n, label simpul. Jika diberikan simpul n, simpul i adalah penerus/
successor n jika ada busur (bukan lintasan) dari n ke i. Baca komentar yang
diberikan untuk memahami cara kerja fungsi.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 6 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Fungsi Successors ditunjukkan oleh kode program di bawah ini. Parameter fungsi
adalah g yang menampung graf dan n yang menampung label/ identitas simpul.
Fungsi ini mengembalikan semua simpul yang merupakan penerus/ successors dari
simpul n. Pada prinsipnya, fungsi Successors memiliki cara kerja yang mirip
dengan fungsi Predecessors, bedanya Successors mengembalikan array yang
berisi label/ identitas simpul penerus. Baca komentar yang diberikan agar anda paham
cara kerja fungsi.

 Untuk menampilkan matriks kedekatan ke monitor, diimplementasikan fungsi


PrintAdjMatrix seperti ditunjukkan oleh kode di halaman selanjutnya.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 7 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Fungsi Destroy diberikan di bawah ini. Fungsi bertugas untuk menghapus graf.
Parameter fungsi adalah g yang menampung graf yang memiliki memori.
Penghapusan graf berarti menghapus semua memori yang dialokasi ke g pada fungsi
Construct. Ada 3 langkah untuk penghapusan graf yang merupakan operasi yang
merupakan kebalikan dari alokasi sebagaimana diberikan di komentar program.
Fungsi mengembalikan g yang memiliki memori kosong atau saat ini bernilai NULL.

 Untuk menggunakan struktur data GraphADT dengan implementasi matriks


kedekatan yang telah ditulis, buatlah program klien sebagaimana ditunjukkan di
halaman selanjutnya. Simpan program klien sebagai
client_graph_adjmatrix.c. Baca komentar agar anda mengerti cara kerja
program klien.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 8 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 9 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Kompilasi dan jalankanlah program. Program berhasil dengan baik. Modifikasi


program klien dengan menambahkan penggunaan fungsi-fungsi yang lain atau pun
membuat graf tidak berarah.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 10 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Implementasi graf dengan adjacency list (list kedekatan)


Pada bagian ini, anda akan membuat struktur data graf dengan representasi lis kedekatan
(adjacency list). Sebagaimana telah dijelaskan di kelas teori, implementasi graf dengan lis
kedekatan memberikan keuntungan, yakni:
a. Alokasi simpul dan busur dilakukan secara dinamik sehingga memori dapat
dialokasikan atau pun dihapus sesuai dengan kebutuhan.
b. Menghilangkan sel-sel kosong di array yang merepresentasikan tidak adanya
busur sehingga tidak ada fragmentasi (kekosongan memori). Oleh sebab itu,
sangat baik untuk representasi graf renggang/ jarang (sparse graph).
c. Memberikan keleluasaan kepada programmer untuk menambahkan informasi
pada busur dan simpul karena representasi busur dan simpul menggunakan
struktur yang dapat ditambahkan anggota variabelnya sesuai kebutuhan. Oleh
sebab itu, adjacency list lebih mudah digunakan untuk merepresentasikan graf
yang lebih kompleks daripada adjacency matrix.
Ikuti langkah-langkah di bawah ini untuk membuat Graph ADT dengan implementasi lis
kedekatan.
 Ada 2 antarmuka (interface) yang akan kita gunakan untuk Graph ADT dengan lis
kedekatan, yakni type.h dan graph.h. Antarmuka type.h ditunjukkan oleh
kode program di bawah ini yang berisi 2 pernyataan pendefinisian tipe data bentukan.
Pernyataan baris ke-6 mendefinisikan tipe data untuk label/ identitas simpul dengan
nama NodeType yang berupa unsigned int. Jika anda ingin mengubah identitas
simpul menjadi karakter, anda tinggal mengganti unsigned int menjadi char.
Jika anda menginginkan identitas/ label simpul berupa string, anda dapat mengganti
unsigned int menjadi array karakter (array of char). Dengan teknik ini, implementasi
tidak akan mengalami perubahan ketika tipe data berubah. Pernyataan baris ke-7
mendefinisikan WeightType sebagai tipe data untuk bobot busur bertipe int.
Anda dapat mengganti int sesuai dengan tipe data yang tepat untuk bobot, misalnya
dengan float, double, atau pun unsigned int.

Antarmuka graph.h ditunjukkan oleh kode program di halaman selanjutnya.


Antarmuka ini menyertakan type.h serta menggunakan pendefinisian kondisional.
Pada graph.h dideklarasikan 3 struktur untuk simpul (baris ke-8), busur (baris ke-
12), dan graf (baris ke-16). Selanjutnya, didefinisikan 3 tipe data berupa pointer, yakni
Node (baris ke-10), Edge (baris ke-14), dan Graph (baris ke-18) yang akan
digunakan untuk alokasi memori dinamik. Antarmuka juga mendeklarasikan fungsi-
fungsi untuk operasi graf yang juga telah digunakan pada implementasi graf dengan

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 11 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

matriks kedekatan di bagian sebelumnya. Tulis ke-2 antarmuka tersebut dan simpan
dengan nama yang diberikan.

 Untuk mengimplementasikan Graph ADT dengan lis kedekatan, pertama sekali anda
harus mendefinisikan struktur simpul, busur, dan graf. Tulis kode program di halaman
selanjutnya dan simpan sebagai graph.c.
Pada pernyataan baris ke-8 s/d 16, diimplementasikan struct GraphNode yang
merupakan representasi simpul yang memiliki 2 variabel anggota, yakni ID bertipe
WeightType dan next bertipe Edge. ID menampung identitas/ label simpul,
sedangkan next merupakan pointer ke busur pertama yang merupakan suksesor
simpul dengan label ID. Pada baris ke-12 s/d 15 dituliskan sebagai komentar beberapa
anggota variabel tambahan yang akan anda gunakan untuk melintasi graf
menggunakan algoritma breadth first search (BFS) dan depth first search (DFS). Ini
untuk menegaskan bahwa anda, sebagai programmer memiliki keleluasaan untuk
menambahkan kompleksitas terhadap graf dengan mudah jika menggunakan
implementasi lis kedekatan.
Pada baris ke-18 s/d 21 diimplementasikan struct GraphEdge yang merupakan
representasi busur dengan 3 anggota variabel, yakni node, weight, dan next.
Variabel node menampung simpul yang menjadi suksesor simpul dengan label ID,
weight menampung bobot, serta next merupakan pointer ke busur selanjutnya
yang merupakan suksesor dari simpul dengan label ID.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 12 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Pada baris ke-24 s/d 26 diimplementasikan struct GraphADT yang merupakan


representasi graf. Ada 3 anggota variabel, yakni V yang merupakan jumlah maksimum
dari simpul yang dapat ditampung graf, num_nodes yang menampung jumlah
simpul yang ada sekarang (aktual) di graf, dan adjlist sebuah array dinamik
berupa pointer bertipe Node. Graf memiliki jumlah simpul maksimum karena
menggunakan array, yakni adjlist untuk menampung simpul. Jika anda
menginginkan graf tidak memiliki batasan jumlah simpul (hanya dibatasi memori
komputer), anda dapat menggantinya dengan menggunakan linked list. Atau dengan
kata lain, anda dapat mengubah struct GraphNode dengan menambahkan
anggota variabel berupa pointer ke simpul.
 Implementasi fungsi Construct ditunjukkan oleh kode program di bawah ini.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 13 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Fungsi Construct memiliki 2 parameter, yakni g yang menampung graf dan V


menampung jumlah maksimum simpul graf. Alokasi memori struct GraphADT
dilakukan oleh pernyataan baris ke-33 diikuti dengan penugasan nilai dari anggota
variabel V dan num_nodes.
Implementasi fungsi NumNodes ditunjukkan oleh pernyataan baris ke-45 s/d 47.
Fungsi ini mengembalikan jumlah simpul yang ada saat ini pada graf.
 Fungsi AddNode ditunjukkan oleh pernyataan baris ke-49 s/d 67 dari kode program
di bawah ini. Fungsi ini bertugas menambahkan simpul ke graf. Parameter fungsi ada
2, yakni g yang menampung graf serta x yang menampung identitas/ label dari simpul
yang hendak ditambahkan. Pada baris ke-52, pertama sekali diperiksa apakah
graf->adjlist masih dapat menampung simpul (g->num_nodes < g->V).
Jika ya, dilakukan alokasi memori (baris ke-53) dan penugasan nilai anggota variabel
simpul (baris ke-54 dan 55). Setelah itu, simpul ditambahkan ke array adjacency list
(baris ke-61) dan jumlah simpul yang ada sekarang di graf di-increment (baris ke-62).
Graf dikembalikan ke fungsi yang memanggil (klien) di baris ke-66.

Fungsi NodeID diimplementasikan oleh pernyataan baris ke-69 dan 70. Fungsi ini
mengembalikan identitas/ label dari simpul. Parameter fungsi adalah node atau yang
menampung sebuah simpul atau lebih tepat, pointer ke simpul.
 Implementasi fungsi Search ditunjukkan oleh kode program di bawah ini.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 14 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

Parameter fungsi adalah g yang menampung graf dan x yang menampung identitas
simpul yang dicari. Baca komentar program agar anda mengerti cara kerja fungsi.
 Operasi untuk menambahkan busur dilakukan oleh fungsi AddEdge di bawah ini.
Parameter fungsi adalah g yang menampung graf, s simpul awal/ asal, e simpul akhir/
tujuan, dan weight yang merupakan bobot. Dengan deskripsi ini, simpul s
merupakan predecessor/ pendahulu simpul e. Baca komentar yang diberikan untuk
dapat memahami cara kerja fungsi AddEdge.

 Fungsi untuk menghitung jumlah pendahulu/ number of predecessors diwakili oleh


fungsi NumPredecessors di bawah ini. Baca komentar yang diberikan untuk
memahami cara kerja fungsi tersebut.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 15 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Fungsi untuk mencari dan mengembalikan semua simpul pendahulu ditunjukkan oleh
fungsi Predecessors di bawah ini. Parameter fungsi adalah g yang menampung
graf dan x yang menampung identitas/ label dari simpul yang hendak dicari
pendahulu-pendahulunya. Fungsi mengembalikan pointer atau array dinamik yang
menampung simpul-simpul pendahulu. Baca komentar yang diberikan agar anda
memahami cara kerja fungsi.

 Fungsi NumSuccessors ditunjukkan oleh kode program di bawah ini. Parameter


fungsi adalah g yang menampung graf dan x yang menampung identitas/ label dari
simpul. Baca komentar program agar anda memahami cara kerja fungsi.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 16 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Fungsi Successors yang bertugas untuk mencari dan mengembalikan semua simpul
penerus/ successors. Parameter fungsi adalah g yang menampung graf dan x yang
menampung identitas/ label dari simpul yang hendak dicari penerus-penerusnya.

Fungsi mengembalikan pointer atau array dinamik yang menampung simpul-simpul


penerus. Baca komentar yang diberikan agar anda memahami cara kerja fungsi.
 Fungsi untuk menghapus struktur data ditunjukkan oleh fungsi Destroy di halaman
selanjutnya. Parameter fungsi adalah g yang menampung graf yang hendak dihapus.
Terdapat 4 langkah untuk menghapus graf yang merupakan kebalikan dari langkah-
langkah ketika membuat graf. Pertama sekali dihapus semua busur dan dilanjutkan
dengan menghapus semua simpul yang ditampung oleh array adjacency list. Setelah
itu, array adjacency list dan graf dihapus.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 17 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Untuk menggunakan struktur data, anda akan membuat program klien yang bekerja
pada graf dengan implementasi lis kedekatan sebagaimana ditunjukkan oleh gambar di
bawah ini. Graf tersebut diambil dari referensi [2] halaman 286. Karena graf pada
gambar mengasumsikan bobot busur sama, maka hanya ada 2 variabel di busur, yakni
simpul dan pointer ke busur selanjutnya. Sementara pada program Graph ADT yang
anda tulis, anggota variabel dari struktur busur (GraphEdge) ada 3, termasuk bobot.
Kita akan menyesuaikannya dengan membuat bobot semua busur bernilai 1 (satu).

Program klien ditunjukkan oleh kode program di halaman selanjutnya. Tulis dan
simpan program dengan nama client_graph.c.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 18 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 19 of 20


Fakultas Informatika dan Teknik Elektro, Institut Teknologi Del

 Kompilasi dan jalankan program.

Dari tampilan, kita dapat menyimpulkan bahwa Graph ADT yang dibuat adalah
benar.

Bagian 3: Tugas Pemrograman


1. Buatlah program klien untuk graf yang diberikan pada soal no. 4 di Bagian I: Essai.
2. Menggunakan Graph ADT dengan implementasi adjacency list yang telah anda tulis di
Bagian 2: Pemrograman, no. 2, tambahkanlah fungsi/ operasi untuk menentukan
minimum spanning tree dengan menerapkan algoritma Kruskal.

Setoran
Lembar jawaban untuk pertanyaan di Bagian I: Essai dan kode program untuk Bagian 3:
Tugas Pemrograman yang disetor melalui ecourse.del.ac.id pada halaman mata kuliah
10S2101 – Algoritma dan Struktur Data.

THS/alstrudat/praktikum04 11/15/2021, 14:41 a11/p11 20 of 20

Anda mungkin juga menyukai