Anda di halaman 1dari 30

LAPORAN PRAKTIKUM STRUKTUR DATA

MODUL XI : GRAPH

Disusun Oleh:
Nama : Febri Yolanda Silalahi
NIM : 21103016
Kelas : S1SI 05-A

PROGRAM STUDI S1 SISTEM INFORMASI


FAKULTAS INFORMATIKA
INSTITUT TEKNOLOGI TELKOM PURWOKERTO
PURWOKERTO
2022
DASAR TEORI

1. Definisi dan Konsep Graph


Dalam ilmu matematika dan komputer, teori graf atau teori grafik, adalah cabang pembelajaran,
yang mempelajari tentang sifat-sifatnya. Suatu graf adalah himpunan benda-benda yang disebut
simpul (vertex atau node) yang terhubung oleh sisi (edge atau busur). Graf / graph biasanya
digambarkan seperti kumpulan titik-titik yang dihubungkan oleh garis-garis berpanah. Suatu sisi
yang mengubungkan suatu simpul sengan simpul yang sama dan dinamakan gelang atau loop.
Graph adalah kumpulan dari simpul dan busur yang secara matematis dinyatakan sebagai :
G = (V,E)
Keterangan: - G = Graph
- V = Simpul/Vertex/Node/Titik
- E = Edge/Busur/Arc/Ruas
Contoh: Suatu graph G(E,V) dengan elemen-elemen sbb:
V mengandung 4 simpul : A, B, C, D
E mengandung 5 ruas :
e1 = (A,B) e2 = (B,C) e3 = (A,D)
e4 = (C,D) e5 = (B,D)
Maka dapat digambarkan :
2. Jenis-Jenis Graph
Berarah dan Tak Berarah

- Graph berarah (directed graph) :


Graph berarah adalah graph dimana urutan simpul dalam sebuah busur memiliki arti atau
dipentingkan.. Misal busur AB adalah e1 sedangkan busur BA adalah e8.
- Graph tak berarah (undirected graph)
Graph tak berarah adalah graph dimana urutan simpul dalam sebuah busur tidak dipentingkan..
Misal busur e1 dapat disebut busur AB atau BA.

Jika setiap busur mempunyai nilai yang menyatakan hubungan antara 2 buah simpul, maka busur
tersebut dinyatakan memiliki bobot.
Representasi Graph

Yang perlu diperhatikan dalam membuat representasi graph dalam bentuk linked list adalah kita
perlu membedakan antara simpul vertex dengan simpul edge. Simpul vertex menyatakan simpul
atau vertex dan simpul edge menyatakan busur (hubungan antar simbol). Struktur keduanya bisa
sama bisa juga berbeda tergantung kebutuhan, namun biasanya disamakan. Yang membedakan
antara simpul vertex dengan simpul edge nantinya adalah anggapan terhadap simpul tersebut
juga fungsinya masing-masing.
Graph berbobot (weighted graph)
Apabila sisi-sisi pada graph disertai juga dengan suatu (atau beberapa) harga yang menyatakan
secara unik kondisi keterhubungan tersebut maka graph tersebut disebut graph berbobot. Dalam
pembahasan algoritma-algoritma graph nanti pengertian bobot akan menggunakan pengertian
biaya sehingga apabila diaplikasikan pada masalah yang berpengertian laba maka kuantitas-
kuantitas terkait adalah kebalikannnya. Misalnya mencari jarak tempuh minimum digantikan
dengan mencari laba maksimum.
Algoritma Djikstra
Pada setiap langkah, ambil sisi yang berbobot minimum yang menghubungkan sebuah simpul
yang telah dikunjungi dengan sebuah simpul lain yang belum dikunjungi. Lintasan dari simpul
asal ke simpul yang baru haruslah merupakan lintasan yang terpendek diantara semua
lintasannya ke simpul-simpul yang belum dikunjungi. Algoritma Djikstra ditemukan oleh Edger
W. Dijkstra (1930–2002), merupakan salah seorang anggota yang paling berpengaruh dari
generasi penemu ilmu komputer. Langkah-langkah algoritma dijkstra adalah sebagai berikut:
1. Berikan nilai bobot untuk setiap titik ke titik lainnya, berikan nilai 0 pada node awal dan nilai
tak hingga terhadap node lain (yang belum terisi).
2. Atur semua node dengan label “Belum dikunjungi” dan atur node awal sebagai “Node
keberangkatan”
3. Dari node keberangkatan, pertimbangkan node tetangga yang belum terjamah dan hitung
jaraknya dari titik keberangkatan. Sebagai contoh, jikatitik keberangkatan X ke Y memiliki
bobot jarak 7 dan dari Y ke node Z berjarak 13, maka jarak ke Z melewati Y menjadi 7+13=20.
Jika jarak ini lebih kecil dari jarak sebelumnya (yang telah terekam sebelumnya) hapus data
lama, simpan ulang data jarak dengan jarak yang baru.
4. Saat kita selesai mempertimbangkan setiap jarak terhadap node tetangga, tandai node yang
telah terjamah sebagai “Node dikunjungi”. Node yang telah dikunjungi tidak akan pernah di cek
kembali, jarak yang disimpan adalah jarak terakhir dan yang paling minimal bobotnya.
5. Set “node belum dikunjungi” dengan jarak terkecil (dari node asal) sebagai “node asal”
selanjutnya, kemudian lanjutkan dengan mengulang Langkah 3.
Algoritma Flyod Warshall
Algoritma pencarian terpendek Flyod Warshall melakukan perbandingan jarak/bobot semua
simpul sehingga hasil dari perhitungan algoritma ini adalah lintasan terpendek untuk semua
pasangan simpul yang terdapat pada graph. Kelebihan dari algoritma ini yakni dapat diterapkan
meskipun nilai jarak/bobot suatu busur/edge negatif berbeda dengan algoritma Djikstra yang
hanya dapat digunakan pada graph yang bernilai positif untuk semua / bobot busurnya.Langkah
awal dalam menerapkan algoritma ini untuk menemukan lintasan dari sebuah graph adalah
dengan membuat representasi graph dalam bentuk matrik adjacency. Graph dalam bentuk matrik
tersebut yang kemudian diproses. Algoritma Flyod Warshall merupakan algoritma yang bersifat
iteratif, jumlah proses iterasi yang mungkin terjadi sebanyak jumlah simpul pangkat 3 (n^3),
sehingga apabila terdapat 7 simpul maka akan terjadi perulangan.
Contoh program
#include <stdio.h>
#include <iostream>
using namespace std;
int ordo[5][5];
void masukkan(int a, int b, int c){
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= 4; j++)
if (i == a && j == b){
ordo[a][b] = ordo[i][j];
ordo[a][b] = c;
}
}
}
void tampilkan(int a, int b, int c){
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= 4; j++)
cout << ordo[i][j] << " ";
cout << endl;
}
}
void inisialisasi(){
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= 4; j++)
ordo[i][j] = 0;
}
}
void menu(){
cout << "-----------------MENU-----------------\n";
cout << "1. Masukkan Data\n";
cout << "2. Tampilkan\n";
cout << "0. Keluar\n";
cout << "Masukkan Pilihan Anda: ";
}
int main(){
inisialisasi();
int a, b, c;
int m;
do{
system("cls");
menu();
cin >> m;
switch (m){
case 1:
system("cls");
cout << "\nMasukkan Koordinat x : ";
cin >> a;
cout << "Masukkan Koordinat y : ";
cin >> b;
cout << "Masukkan Isi : ";
cin >> c;
if (a <= 4 && b <= 4){
masukkan(a, b, c);
}
else{
cout << "\nIndeks harus kurang dari 4\n";
}break;
system("pause");
case 2:system("cls");
tampilkan(a, b, c); break;
system("pause");
}system("pause");
} while (m != 0);
}
GUIDED

1. Latihan 1
Berdasarkan ilustrasi graph berarah dan berbobot yang ditunjukkan pada
gambar 05, buatlah repsentasinya dalam bentuk matriks

Penjelasan:
- Jarak dari Bandung ke Bandung adalah 0 km
- Jarak dari Bandung ke Bekasi adalah 5 km
- Jarak dari Bandung ke Jakarta adalah 0 km
- Jarak dari Bandung ke Purwokerto adalah 15 km
- Jarak dari Bandung ke Semarang adalah 0 km
- Jarak dari Bandung ke Tasikmalaya adalah 0 km
- Jarak dari Bandung ke Yogyakarta adalah 0 km
- Jarak dari Bekasi ke Bandung adalah 6 km
- Jarak dari Bekasi ke Bekasi adalah 0 km
- Jarak dari Bekasi ke Jakarta adalah 0 km
- Jarak dari Bekasi ke Purwokert adalah 0 km
- Jarak dari Bekasi ke Semarang adalah 5 km
- Jarak dari Bekasi ke Tasikmalaya adalah 0 km
- Jarak dari Bekasi ke Yogyakarta adalah 0 km
- Jarak dari Jakarta ke Bandung adalah 7 km
- Jarak dari Jakarta ke Bekasi adalah 8 km
- Jarak dari Jakarta ke Jakarta adalah 0 km
- Jarak dari Jakarta ke Purwokerto adalah 0 km
- Jarak dari Jakarta ke Semarang adalah 0 km
- Jarak dari Jakarta ke Tasikmalaya adalah 0 km
- Jarak dari Jakarta ke Yogyakarta adalah 0 km
- Jarak dari Purwokerto ke Bandung adalah 0 km
- Jarak dari Purwokerto ke Bekasi adalah 0 km
- Jarak dari Purwokerto ke Jakarta adalah 0 km
- Jarak dari Purwokerto ke Purwokerto adalah 0 km
- Jarak dari Purwokerto ke Semarang adalah 7 km
- Jarak dari Purwokerto ke Tasikmalaya adalah 0 km
- Jarak dari Purwokerto ke Yogyakarta adalah 3 km
- Jarak dari Semarang ke Bandung adalah 0 km
- Jarak dari Semarang ke Baekasi adalah 0 km
- Jarak dari Semarang ke Jakarta adalah 23 km
- Jarak dari Semarang ke Purwokerto adalah 0 km
- Jarak dari Semarang ke Semarang adalah 0 km
- Jarak dari Semarang ke Tasikmalaya adalah 10 km
- Jarak dari Semarang ke Yogyakarta adalah 8 km
- Jarak dari Tasikmalaya ke Bandung adalah 5 km
- Jarak dari Tasikmalaya ke Bekasi adalah 0 km
- Jarak dari Tasikmalaya ke Jakarta adalah 0 km
- Jarak dari Tasikmalaya ke Purwokerto adalah 4 km
- Jarak dari Tasikmalaya ke Semarang adalah 0 km
- Jarak dari Tasikmalaya ke Tasikmalaya adalah 0 km
- Jarak dari Tasikmalaya ke Yogyakarta adalah 0 km
- Jarak dari Yogyakarta ke Bandung adalah 0 km
- Jarak dari Yogyakarta ke Bekasi adalah 0 km
- Jarak dari Yogyakarta ke Jakarta adalah 0 km
- Jarak dari Yogyakarta ke Purwokerto adalah 4 km
- Jarak dari Yogyakarta ke Semarang adalah 9 km
- Jarak dari Yogyakarta ke Tasikmalaya adalah 0 km
- Jarak dari Yogyakarta ke Yogyakarta adalah 0 km
2. Latihan 2
Berdasarkan tugas guided II, buatlah program dari untuk menghasilkan representasi
dalam bentuk matriks.

Program pertama : Manual Input


Source Code
#include <iostream>

using namespace std;

string simpul[7] = {"Bandung", "Bekasi", "Jakarta", "Purwokerto",


"Semarang", "Tasikmalaya", "Yogyakarta"};

int busur[7][7] = {{0,5,0,15,0,0,0},


{6,0,0,0,5,0,0},
{7,8,0,0,0,0,0},
{0,0,0,0,7,0,3},
{0,0,23,0,0,10,8},
{5,0,0,4,0,0,0},
{0,0,0,4,9,0,0}};

void tampilGraph(){
if(simpul && busur){
for(int baris = 0; baris < 7; baris++){
cout<<simpul[baris]<<" : ";
for(int kolom = 0; kolom < 7; kolom++){
if(busur[baris][kolom] != 0){
cout<<simpul[kolom]<<"("<<busur[baris][kolom]<<")"<<" ";
}
}
cout<<endl;
}
}
}

int main(){
tampilGraph();

return 0;
}
Running Program

Penjelasan :
Dalam source code sudah dimasukkan data data, jadi tidak perlu untuk mengimput data
lagi. Jika dijalankan, hasil akan seperti gambar di atas.

Program kedua : Input dari User


Source Code
#include <iostream>
#include <string>

using namespace std;

int jumlahSimpul = 5;
string *dataSimpul;
int **dataBusur;
bool cekMatrik = false;

void buatMatriks(){
dataSimpul = new string[jumlahSimpul];
//Membuat simpul dengan jumlah yang dimasukkan user

dataBusur = new int*[jumlahSimpul];


dataBusur[0] = new int[jumlahSimpul * jumlahSimpul];
for(int i = 1; i < jumlahSimpul; i++){
dataBusur[i] = dataBusur[i-1] + jumlahSimpul;
}
//Membuat matrik 2 dimensi dengan ukuran sesuai masukkan user

cout<<"Silahkan masukkan nama simpul "<<endl;


for(int i = 0; i < jumlahSimpul; i++){
cout<<"Simpul "<<i+1<<" : ";
cin>>dataSimpul[i];
}
//Proses input data simpul

cout<<"Silahkan masukkan bobot antar simpul "<<endl;


for(int baris = 0; baris < jumlahSimpul; baris++){
for(int kolom = 0; kolom < jumlahSimpul; kolom++){
cout<<dataSimpul[baris]<<" --> "<<dataSimpul[kolom]<<" : ";
cin>> dataBusur[baris][kolom];
}
}
//Prose input data matriks (busur)

cekMatrik = true;
//Atur keberadaan matrik menjadi ada/true
}

void tampilMatriks(){
if(cekMatrik){
for(int i = 0; i < jumlahSimpul; i++){
cout<<dataSimpul[i]<<" ";
}
cout<<endl;
for(int baris = 0; baris < jumlahSimpul; baris++){
for(int kolom = 0; kolom < jumlahSimpul; kolom++){
cout<<dataBusur[baris][kolom]<<" ";
}
cout<<endl;
}
}else{
cout<<"Tidak ada matriks"<<endl;
}
}

int main(){
cout<<"Silahkan masukkan jumlah simpul : ";
cin>>jumlahSimpul;
buatMatriks();
tampilMatriks();

return 0;
}
Running Program

Penjelasan:
Dalam program ini, kita menginput data karena dalam source code tidak dibuat syntax
data-data, tetapi syntaxnya adalah penginputan data oleh user. Jadi ketika program
dijalankan, maka kita dapat menginput data-data yang diminta.
3. Latihan 3
Berdasarkan ilustrasi graph berarah dan berbobot yang ditunjukkan pada gambar 05,
buatlah repsentasinya dalam bentuk linked list

Penjelasan:
- Jarak dari Bandung ke Bandung adalah 0 km
- Jarak dari Bandung ke Bekasi adalah 5 km
- Jarak dari Bandung ke Jakarta adalah 0 km
- Jarak dari Bandung ke Purwokerto adalah 15 km
- Jarak dari Bandung ke Semarang adalah 0 km
- Jarak dari Bandung ke Tasikmalaya adalah 0 km
- Jarak dari Bandung ke Yogyakarta adalah 0 km
- Jarak dari Bekasi ke Bandung adalah 6 km
- Jarak dari Bekasi ke Bekasi adalah 0 km
- Jarak dari Bekasi ke Jakarta adalah 0 km
- Jarak dari Bekasi ke Purwokert adalah 0 km
- Jarak dari Bekasi ke Semarang adalah 5 km
- Jarak dari Bekasi ke Tasikmalaya adalah 0 km
- Jarak dari Bekasi ke Yogyakarta adalah 0 km
- Jarak dari Jakarta ke Bandung adalah 7 km
- Jarak dari Jakarta ke Bekasi adalah 8 km
- Jarak dari Jakarta ke Jakarta adalah 0 km
- Jarak dari Jakarta ke Purwokerto adalah 0 km
- Jarak dari Jakarta ke Semarang adalah 0 km
- Jarak dari Jakarta ke Tasikmalaya adalah 0 km
- Jarak dari Jakarta ke Yogyakarta adalah 0 km
- Jarak dari Purwokerto ke Bandung adalah 0 km
- Jarak dari Purwokerto ke Bekasi adalah 0 km
- Jarak dari Purwokerto ke Jakarta adalah 0 km
- Jarak dari Purwokerto ke Purwokerto adalah 0 km
- Jarak dari Purwokerto ke Semarang adalah 7 km
- Jarak dari Purwokerto ke Tasikmalaya adalah 0 km
- Jarak dari Purwokerto ke Yogyakarta adalah 3 km
- Jarak dari Semarang ke Bandung adalah 0 km
- Jarak dari Semarang ke Baekasi adalah 0 km
- Jarak dari Semarang ke Jakarta adalah 23 km
- Jarak dari Semarang ke Purwokerto adalah 0 km
- Jarak dari Semarang ke Semarang adalah 0 km
- Jarak dari Semarang ke Tasikmalaya adalah 10 km
- Jarak dari Semarang ke Yogyakarta adalah 8 km
- Jarak dari Tasikmalaya ke Bandung adalah 5 km
- Jarak dari Tasikmalaya ke Bekasi adalah 0 km
- Jarak dari Tasikmalaya ke Jakarta adalah 0 km
- Jarak dari Tasikmalaya ke Purwokerto adalah 4 km
- Jarak dari Tasikmalaya ke Semarang adalah 0 km
- Jarak dari Tasikmalaya ke Tasikmalaya adalah 0 km
- Jarak dari Tasikmalaya ke Yogyakarta adalah 0 km
- Jarak dari Yogyakarta ke Bandung adalah 0 km
- Jarak dari Yogyakarta ke Bekasi adalah 0 km
- Jarak dari Yogyakarta ke Jakarta adalah 0 km
- Jarak dari Yogyakarta ke Purwokerto adalah 4 km
- Jarak dari Yogyakarta ke Semarang adalah 9 km
- Jarak dari Yogyakarta ke Tasikmalaya adalah 0 km
- Jarak dari Yogyakarta ke Yogyakarta adalah 0 km
4. Latihan 4
Berdasarkan tugas guided III, buatlah program untuk menghasilkan representasi graph
dalam bentuk linked list
Source Code
#include <iostream>
#include <string>

using namespace std;

int jumlahSimpul = 5;
string *dataSimpul;
int **dataBusur;
bool cekMatrik = false;

struct graph{
graph *kanan;
string data;
graph *kiri;
};
graph *simpul;
graph *busur;
graph *awal;
graph *akhir;
graph **alamat;
graph *helperA;
graph *helperB;

void inisiasi(){
awal = NULL;
akhir = NULL;
}
bool graphKosong(){
if(awal == NULL && akhir == NULL){
return true;
}else{
return false;
}
}

void buatMatriks(){
dataSimpul = new string[jumlahSimpul];
dataBusur = new int*[jumlahSimpul];
dataBusur[0] = new int[jumlahSimpul * jumlahSimpul];
for(int i = 1; i < jumlahSimpul; i++){
dataBusur[i] = dataBusur[i-1] + jumlahSimpul;
}
cout<<"Silahkan masukkan nama simpul "<<endl;
for(int i = 0; i < jumlahSimpul; i++){
cout<<"Kota "<<i+1<<" : ";
cin>>dataSimpul[i];
}
cout<<"Silahkan masukkan bobot antar simpul "<<endl;
for(int baris = 0; baris < jumlahSimpul; baris++){
for(int kolom = 0; kolom < jumlahSimpul; kolom++){
cout<<dataSimpul[baris]<<" --> "<<dataSimpul[kolom]<<" : ";
cin>> dataBusur[baris][kolom];
}
}
cekMatrik = true;
}

void buatSimpulGraph(){
alamat = new graph*[jumlahSimpul];
// Membuat pointer alamat sebanyak jumlah simpul

// Membuat representasi graph berupa matriks dengan memanggil fungsi

buatMatriks();
for(int i = 0; i < jumlahSimpul; i++){
if(graphKosong()){
simpul = new graph;
simpul->data = dataSimpul[i];
simpul->kanan = NULL;
simpul->kiri = NULL;
awal = simpul;
akhir = simpul;
alamat[i] = awal; // Simpan alamat simpul
}else{
simpul = new graph;
simpul->data = dataSimpul[i];akhir->kiri = simpul;
akhir = simpul;
simpul->kiri = NULL;
simpul->kanan = NULL;
alamat[i] = akhir;
}
}
helperA = awal;
for(int baris = 0; baris < jumlahSimpul; baris++){
helperB = helperA;
for(int kolom = 0; kolom < jumlahSimpul; kolom++){
if(dataBusur[baris][kolom] != 0){
simpul = new graph;
simpul->data = to_string(dataBusur[baris][kolom]);
helperB->kanan = simpul;
simpul->kiri = alamat[kolom];
simpul->kanan = NULL;
helperB = simpul;
}
}
helperA = helperA->kiri;
}
}

void tampilGraph(){
if(!graphKosong()){
helperA = awal;
while(helperA != NULL){
cout<<helperA->data<<" : ";
helperB = helperA->kanan;
while(helperB != NULL){
cout<<helperB->kiri->data<<" : "<<helperB->data<<" ";
helperB = helperB->kanan;
}
cout<<endl;
helperA = helperA->kiri;
}
}else{
cout<<"Graph kosong...!!!"<<endl;
}
}

int main(){
inisiasi();
cout<<"Silahkan masukkan jumlah kota : ";
cin>>jumlahSimpul;
buatSimpulGraph();
tampilGraph();

return 0;
}
Running Program
Penjelasan:
Dalam program, kita disuruh menginput data sesuai dengan yang diminta. Untuk
pengisian data (penginputan data), kita bisa memasukkan data-data yang ada dalam
guided 3.
UNGUIDED

1. Latihan 1
Jelaskan dengan gambar urutan setiap proses yang terjadi ketika fungsi
buatSimpulGraph() pada tugas guided IV dijalankan.

Fungsi BuatSimpulGraph() pada guided 4 adalah membuat pointer alamat sebanyak


jumlah simpul. Misal jumlah simpul adalah 4, maka alamat pointer yang dibuat juga
sebanyak jumlah simpul. Contohnya adalah seperti pada gambar diatas(linked list).
Adapun penjelasan dari gambar diatas adalah sebagai berikut:
- Bandung ke Bekasi memiliki jarak sejauh 5 km
- Bandung ke Purwokert memiliki jarak sejauh 15 km
- Bekasi ke Bandung memiliki jarak sejauh 6 km
- Bekasi ke Semarang memiliki jarak sejauh 5 km
- Jakarta ke Bandung memiliki jarak sejauh 7 km
- Jakarta ke Bekasi memiliki jarak sejauh 8 km
- Purwokerto ke Semarang memiliki jarak sejauh 7 km
- Purwokerto ke Yogyakarta memiliki jarak sejauh 3 km
- Semarang ke Jakarta memiliki jarak sejauh 23 km
- Semarang ke tasikmalaya memiliki jarak sejauh 10 km
- Semarang ke Yogyakarta memiliki jarak sejauh 8 km
- Tasikmalaya ke Bandung memiliki jarak sejauh 5 km
- Tasikmalaya Purwokerto memiliki jarak sejauh 4 km
- Yogyakarta ke Purwokerto memiliki jarak sejauh 4 km
- Yogyakarta ke Semarang memiliki jarak sejauh 9 km
2. Latihan 2
Tambahkan fungsi untuk mencari busur terpendek pada program pada tugas guided
IV. (Jalankan dan laporkan hasilnya)
Source Code
#include <iostream>
#include <string>

using namespace std;

int jumlahSimpul = 5;
string *dataSimpul;
int **dataBusur;
bool cekMatrik = false;

struct graph{
graph *kanan;
string data;
graph *kiri;
};
graph *simpul;
graph *busur;
graph *awal;
graph *akhir;
graph **alamat;
graph *helperA;
graph *helperB;

void inisiasi(){
awal = NULL;
akhir = NULL;
}
bool graphKosong(){
if(awal == NULL && akhir == NULL){
return true;
}else{
return false;
}
}

void buatMatriks(){
dataSimpul = new string[jumlahSimpul];
dataBusur = new int*[jumlahSimpul];
dataBusur[0] = new int[jumlahSimpul * jumlahSimpul];
for(int i = 1; i < jumlahSimpul; i++){
dataBusur[i] = dataBusur[i-1] + jumlahSimpul;
}
cout<<"Silahkan masukkan nama simpul "<<endl;
for(int i = 0; i < jumlahSimpul; i++){
cout<<"Kota "<<i+1<<" : ";
cin>>dataSimpul[i];
}
cout<<"Silahkan masukkan bobot antar simpul "<<endl;
for(int baris = 0; baris < jumlahSimpul; baris++){
for(int kolom = 0; kolom < jumlahSimpul; kolom++){
cout<<dataSimpul[baris]<<" --> "<<dataSimpul[kolom]<<" : ";
cin>> dataBusur[baris][kolom];
}
}
cekMatrik = true;
}

void buatSimpulGraph(){
alamat = new graph*[jumlahSimpul];
// Membuat pointer alamat sebanyak jumlah simpul

// Membuat representasi graph berupa matriks dengan memanggil fungsi

buatMatriks();
for(int i = 0; i < jumlahSimpul; i++){
if(graphKosong()){
simpul = new graph;
simpul->data = dataSimpul[i];
simpul->kanan = NULL;
simpul->kiri = NULL;
awal = simpul;
akhir = simpul;
alamat[i] = awal; // Simpan alamat simpul
}else{
simpul = new graph;
simpul->data = dataSimpul[i];akhir->kiri = simpul;
akhir = simpul;
simpul->kiri = NULL;
simpul->kanan = NULL;
alamat[i] = akhir;
}
}
helperA = awal;
for(int baris = 0; baris < jumlahSimpul; baris++){
helperB = helperA;
for(int kolom = 0; kolom < jumlahSimpul; kolom++){
if(dataBusur[baris][kolom] != 0){
simpul = new graph;
simpul->data = to_string(dataBusur[baris][kolom]);
helperB->kanan = simpul;
simpul->kiri = alamat[kolom];
simpul->kanan = NULL;
helperB = simpul;
}
}
helperA = helperA->kiri;
}
}

void tampilGraph(){
if(!graphKosong()){
helperA = awal;
while(helperA != NULL){
cout<<helperA->data<<" : ";
helperB = helperA->kanan;
while(helperB != NULL){
cout<<helperB->kiri->data<<" : "<<helperB->data<<" ";
helperB = helperB->kanan;
}
cout<<endl;
helperA = helperA->kiri;
}
}else{
cout<<"Graph kosong...!!!"<<endl;
}
}
void jalurPendek(){
string newhelper,asal,tujuan;
int a=0;if(!graphKosong()){
cout<< "Masukkan Daerah Asal : ";cin>>asal;
cout<< "Masukkan Daerah Tujuan : ";cin>>tujuan;
helperA = awal;
while(helperA != NULL){
if (helperA->data==asal){
break;
}else{
helperA = helperA->kiri;
}
}
while(helperA->data != tujuan){
if(a!=0){
cout<<asal<<" : ";
}
cout<<helperA->data<<" : ";
helperB = helperA->kanan;
while(helperB != NULL){
if(helperB->kiri->data==tujuan){
cout<<helperB->kiri->data<<" : "<<helperB->data<<" ";
}
helperB = helperB->kanan;
}
cout<<endl;
helperA = helperA->kiri;
a=a+1;
}
}else{
cout<<"Graph kosong...!!!"<<endl;
}
}
int main(){
inisiasi();
cout<<"Silahkan masukkan jumlah kota : ";
cin>>jumlahSimpul;
buatSimpulGraph();
tampilGraph();
cout<<endl;
jalurPendek();

return 0;
}
Running Program
Penjelasan:
Dalam program, kita disuruh menginput data sesuai dengan yang diminta. Untuk
pengisian data (penginputan data), kita bisa memasukkan data-data yang ada dalam
guided yang sebelumnya. Yaitu jumlah kota sebanyak 7, setelah itu kita masukkan
jarak antar kota sesuai dengan data yang sudah ada. Jika sudah diisi, maka akan
muncul jarak dari kota yang sat uke kota yang lainnya. Dan setelah itu, kita disuruh
menginput daerah asal dan daerah tujuan, maka akan muncul jarak terdekat dari
daerah asal ke daerah tujuan, missal untuk melihat jarak antara kota Bandung dan
Yogyakarta, maka jaraknya ada sejauh 3 km dan 8 km.
SUMBER

https://brawlyvonfabre.blogspot.com/p/graph.html
https://galehfatmaea.blogspot.com/2014/05/graph-c.html
https://bocahngoding.blogspot.com/2018/01/pengertian-dan-penjelasan-tentang-
garph.html

PENGALAMAN BELAJAR

Dalam pembelajaran materi kali ini yaitu tentang graph kita dapat mencari berapa nilai
terpendek dari simpul asal ke simpul yang lain. Tidak hanya itu, graph juga bisa digambarkan
menjadi bentuk djikstra, flyod warshall, linkedlist.
Dalam praktikum ini saya bisa mengerti atau bisa dibilang sudah lumayan paham
bagaimana penerapan graph. Untuk melihat jarak terpendek,jarak simpul A ke simpul B, dan lain
sebagainya.

Anda mungkin juga menyukai