inf202: struktur data graph & persiapan uas€¦ · v1 v2 v4 v5 v3 v terdiri dari v1, v2, …,...
TRANSCRIPT
Pertemuan 15:
INF202: Struktur Data
GRAPH & Persiapan UAS
Dosen: Wayan Suparta, PhD
Informasi UAS dan TUGAS:
• Bahan UAS (close book): 100 menit
• Tugas 3:
1. Topik individu yang telah dipilih melalui undian.
2. Kumpulkan pada Waktu UAS (20 Mei 2019) dimana
softcopy (EDMODO) dan print Hardcopy.
• Ujian Praktek (salah satu):
1. STACK
2. QUEUE
3. TREE
• Ujian Teori: 1. Stack (Tumpukan)
2. Queue (Antrian)
3. Linked list (Senarai Berantai)
4. Tree (Pohon)
5. Graf
6. Ada penggalan program
SOAL LATIHAN UAS 1. Buat fungsi menambah simpul/node dalam linked-list.
2. Buat fungsi menghapus data dalam antrian.
3. Buat fungsi preorder dalam pohon biner.
4. Tentukan traversal tree dari tree:
(a). A + B - ( C - D)^E + (F * G)
(b). A * B + C + D * (E + F) + (G - H / I) ^ J
5. Gambarkan pohon binernya dari traversal dari tree:
(a). Pre-Order: S E L A N G M U
(b). Post-Order: CENTURY
6. Gambarkan pohon binernya dari huruf/bilangan:
(a). DEWI ABG METU LORONG
(b). 90, 45, 55, 50, 40, 50, 60, 70, 40, 35, 30, 20, 80, 75, 85
7. Implementasikan sebuah single linked list yang dapat
merepresentasikan data mahasiswa berupa NIM, Nama,
Alamat dan No HP. Buatlah fungsi-fungsi untuk menelusuri,
menambah simpul dan menghapus simpul.
8. Buat program untuk menyiapkan array dua dimensi yang
akan digunakan untuk mengisi Stack S sebanyak 5 elemen,
bertipe karakter.
9. Buatlah algoritma yang dapat menampilkan data antrian
pasien masuk rumah sakit.
10. Buatlah algoritma yang dapat menyisipkan data di belakang
dalam model linked list seperti antrian mobil di kapal
penyeberangan (ferry). Penyisipan data adalah serentak.
11. Sebuah graf dengan 6 simpul, berapakah minimum dan
maksimum jumlah busur?
12. Jika ada 5 kota yang saling berdekatan dan terhubung jalur
darat, berapa jalur lintasan terpendek yang dapat dilakukan.
13. Buatlah program untuk menyetor simpanan ke bank dengan
menu pilihan: 1. Masukkan Antrian (nama, nomer rekening
dan jumlah setoran), 2. Proses Antrian, 3. Tampilkan Antrian
dan 4. EXIT. Input data adalah serentak.
14. Buatlah program yang dapat menentukan Pre-Order dan In-
Order jika nilai Post-Ordernya: 20 70 90 60 40 30 50
15. Buatlah program untuk menyimpan balok-balok kayu dalam
sebuah gudang berukuran panjang = 5 m, lebar 30 cm dan
tinggi 540 cm. Program harus dapat menampilkan menu : 1.
Masukkan data balok (kode balok, jenis balok dan jumlah
balok), 2. Proses, 3. View Balok dan 4. EXIT.
16. Buat program untuk (1) menyimpan, (2) menghapus dan
(3) cetak elemen dalam stack berupa huruf-huruf. Entry data
adalah secara serentak.
17. Ubahlah notasi aritmatika PREFIX berikut ke notasi
POSTFIX: + * A / B + C – D E F
GRAPH
• Graph adalah kumpulan dari simpul dan busur
yang secara matematis dinyatakan sebagai:
G = (V, E)
Dimana
G = Graph
V = Vertex, atau Simpul, atau Node, atau Titik
E = Edge, atau Busur, atau arc
Contoh graph :
B
A C
D E
Gb. 1. Undirected graph
vertex
edge
e1 e3 e4
e7 e5 e2
e6
v1
v2
v4 v5
v3
V terdiri dari v1, v2, …, v5
E terdiri dari e1, e2, … , e7
• Sebuah graph mungkin hanya terdiri dari satu simpul
• Sebuah graph mungkin mempunyai simpul yang tak terhubung dengan simpul yang lain
• Sebuah graph mungkin semua simpulnya saling berhubungan
Ciri-Ciri Graph
Gb. 2. Ciri graph
Graph Berarah dan Graph Tak Berarah
B
A C
D E
B
A C
D E
Gb. 3. Directed graph Gb. 4. Undirected graph
e1 e3
e4
e7 e5 e2
e6
v1
v2
v4 v5
v3 v1
v2
v3
v5 v4
e1
e2
e3
e4
e5
e6
e7
e8 e9
e10
Dapat dilihat dari bentuk busur yang artinya urutan penyebutan pasangan 2
simpul.
• Graph tak berarah (undirected graph atau non-directed graph) – Urutan simpul dalam sebuah busur tidak dipentingkan.
Misal busur e1 dapat disebut busur AB atau BA
• Graph berarah (directed graph) – Urutan simpul mempunyai arti. Misal busur AB adalah
e1 sedangkan busur BA adalah e8.
• Graph Berbobot (Weighted Graph) – Jika setiap busur mempunyai nilai yang menyatakan
hubungan antara 2 buah simpul, maka busur tersebut dinyatakan memiliki bobot.
– Bobot sebuah busur dapat menyatakan panjang sebuah jalan dari 2 buah titik, jumlah rata-rata kendaraan perhari yang melalui sebuah jalan, dll.
Graph Berbobot :
B
A C
D E
B
A C
D E
Gb. 5. Directed graph Gb. 6. Undirected graph
5 3
12
6 8 4
3
v1
v2
v4 v5
v3 v1
v2
v3
v5 v4
5
e2
3
12
8
3
6
4 7
10
Panjang busur (atau bobot) mungkin tidak digambarkan secara panjang
yang proposional dengan bobotnya. Misal bobot 5 digambarkan lebih
panjang dari 7.
Istilah pada graph
1. Incident
Jika e merupakan busur dengan simpul-simpulnya adalah v dan w yang ditulis e=(v,w), maka v dan w disebut “terletak” pada e, dan e disebut incident dengan v dan w.
2. Degree (derajat), indegree, dan outdegree
Degree sebuah simpul adalah jumlah busur yang incident dengan simpul tersebut.
Indegree sebuah simpul pada graph berarah adalah jumlah
busur yang kepalanya incident dengan simpul tersebut, atau
jumlah busur yang “masuk” atau menuju simpul tersebut.
Outdegree sebuah simpul pada graph berarah adalah jumlah
busur yang ekornya incident dengan simpul tersebut, atau
jumlah busur yang “keluar” atau berasal dari simpul tersebut.
3. Adjacent
Pada graph tidah berarah, 2 buah simpul disebut
adjacent bila ada busur yang menghubungkan
kedua simpul tersebut. Simpul v dan w disebut
adjacent.
Pada graph berarah, simpul v disebut adjacent
dengan simpul w bila ada busur dari w ke v.
w e
v
v
e w
Gb. 7. Adjacent tak berarah
Gb. 8. Adjacent berarah
Predecessor
Successor
4. Successor dan Predecessor
Pada graph berarah, bila simpul v adjacent dengan
simpul w, maka simpul v adalah successor simpul
w, dan simpul w adalah predecessor dari simpul v.
5. Path
Sebuah path adalah serangkaian simpul-simpul
yang berbeda, yang adjacent secara berturut-turut
dari simpul satu ke simpul berikutnya.
1
4 3
2
4
2
4
2
4
2 1
3
1
3
1
3
Gb. 9. Path berarah dan tak berarah
Representasi Graph dalam bentuk
matrix
• Adjacency Matrix Graph tak berarah
B
A C
D E
0 1 0 1 0
1 0 1 0 1
0 1 0 1 1
1 0 1 0 1
0 1 1 1 0
A B
A
0
B
C
1 2 4 3
C D E
D
E
0
1
2
4
3
Urut abjad
Degree simpul : 3
Gb. 10. Graf tak berarah
Representasi Graph dalam bentuk
matrix
• Adjacency Matrix Graph berarah
Gb. 11. Graph berarah
0 1 0 1 0
1 0 1 0 1
0 1 0 1 1
0 0 1 0 1
0 0 0 0 0
A B
A
0
B
C
1 2 4 3
C D E
D
E
0
1
2
4
3
B
A C
D E
ke
dari
out
in
(Baris)
(kolom)
• Adjency List graph tak berarah
• Digambarkan sebagai sebuah simpul yang
memiliki 2 pointer.
• Simpul vertex : Simpul edge :
Representasi Graph dalam bentuk
Linked List
info info
Menunjuk ke simpul
vertex berikutnya,
dalam untaian simpul
yang ada
Menunjuk ke simpul
edge pertama Menunjuk ke
simpul edge
berikutnya, bila
masih ada
Menunjuk ke simpul
vertex tujuan yang
berhubungan dengan
simpul vertex asal
left right left right
Contoh : untuk vertex A, memiliki 2 edge yang
terhubung yaitu e1 dan e2.
A
C
D
B
E
e2 e1 B
A C
D E
e1 e3
e4
e7 e5 e2
e6
Urut abjad
Gb. 12. Graph tak berarah
1. Gambar graph dapat disusun dengan lebih sederhana:
A
C
D
B
E
D
A
B
A
B
C E
D E
C
C D
B
A C
D E
B
E
A
C
D
B
E
D
A
B
C
E
C
B
E
B
A C
D E
Gb. 13. Adjency List graph berarah
Graph berarah dan berbobot
B
A C
D E
5
3
2
14
12
6
7
13
0 5 0 2 0
6 0 3 0 0
0 0 0 0 9
0 0 13 0 7
0 14 0 0 0
A
A
0
B
C
1 2 4 3
D
E
0
1
2
4
3
B C D E
Perhatikan pemilihan nilai 0. Gb. 14. Graph berbobot
• Define struct untuk sebuah simpul yang dapat
digunakan sebagai vertex maupun edge.
• Deklarasinya:
typedef struct tipeS
{
tipeS *Left;
int INFO;
tipeS *Right;
};
tipeS *FIRST, *PVertex, *PEdge;
Penyelesaian kasus Graph
Gambar 14:
• Define simpul untuk vertex dan
edge
• Mengidentifikasi Simpul pertama
sebagai vertex yang pertama
• Tambahkan vertex sisanya
• Tambahkan edge pada masing-
masing vertex yang telah terbentuk
• Tampilkan representasi graph
berikut bobotnya
#include<stdio.h>
#include<iostream>
#include<conio.h>
using namespace std;
typedef struct tipeS {
struct tipeS *Left;
int INFO;
struct tipeS *Right;
};
typedef struct tipeS simpul;
simpul *P,*FIRST,*LAST,*PVertex,*PEdge,*Q,*R,*S;
simpul *PointS[5];
int main() {
int A[5][5] = {0,5,0,2,0, 6,0,3,0,0, 0,0,0,0,9, 0,0,12,0,7,
0,14,0,0,0};
char NmS[6] = "ABCDE";
int I, J;
//Simpul Vertex yang pertama
I=0;J=0;
P=new simpul;
P->INFO = NmS[0];
FIRST = P; LAST = P;
P->Left = NULL; P->Right = NULL;
PointS[0] = P;
printf("\n%c", P->INFO);
printf(" Alamat %d ", PointS[0]);
printf("\n");
//Simpul Vertex yang berikutnya
for (I=1;I<=4;I++) {
P = new simpul;
P->INFO = NmS[I];
LAST->Left = P;
LAST = LAST->Left;
P->Left = NULL;
P->Right = NULL;
PointS[I] = P;
printf("\n %c ", P->INFO);
printf("Alamat %d \n", PointS[I]);
}
Contoh 1: Dari Gambar 5*
//Simpu2 Edge untuk semua Vertex Q = FIRST; for (I=0; I<=4; I++) { R=Q; printf("Vertex %c ...", Q->INFO); for (J=0; J<=4; J++) { if(A[I][J]!=0) { P = new simpul; P->INFO = A[I][J]; R->Right = P; P->Left = PointS[J]; printf("berhubungan dengan %c: ", P->Left->INFO); printf("bobot %d;", P->INFO); P->Right = NULL; R = P; } } printf("\n"); Q = Q->Left; } }
Outputnya:
Contoh 2: Hitung Jarak Antar Titik
B
A C
D E
5 3
2
14
12
6
7
13
Carilah jarak terpendek dari A ke E.
Algoritma: 1. Menentukan jumlah simpul
(vertex)
2. Pembentukan garis
3. Menentukan panjang busur
4. Hitung jarak-jarak dari A ke titik E.
Output:
(1)
(2)
(3)
(4)
Programnya adalah
#include <iostream>
#include <string>
using namespace std;
class graf{
public :
void masukan();
void keluaran();
private:
char kata1; //A
char kata2; //B
char kata3; //C
char kata4; //D
char kata5; //E
int a, b, c, d, e, f, g, h, i, j;
};
void graf::masukan (){
cout<<"Hitung Jarak pada Graf dengan 5
Titik Simpul"<<endl<<endl;
cout<<" Titik 1: ";cin>>kata1;
cout<<" Titik 2: ";cin>>kata2;
cout<<" Titik 3: ";cin>>kata3;
cout<<" Titik 4: ";cin>>kata4;
cout<<" Titik 5: ";cin>>kata5; cout<<endl;
cout<<"Garis yang dapat dibentuk: "<<endl;
cout<<kata1<<kata2<<", "; //AB = a
cout<<kata2<<kata3<<", "; //BC = b
cout<<kata3<<kata5<<", "; //CE = c
cout<<kata4<<kata3<<", "; //DC = d
cout<<kata4<<kata5<<“,”; //DE = e
cout<<kata1<<kata4<<", "; //AD = f
cout<<kata2<<kata1<<", "; //BA = g
cout<<kata5<<kata2<<endl<<endl; //EB = h
Sambungan ….#1 cout<<"Busur simpul "<<kata1<<" dengan "<<kata2<<" : ";cin>>a;
cout<<"Busur simpul "<<kata2<<" dengan "<<kata3<<" : ";cin>>b;
cout<<"Busur simpul "<<kata3<<" dengan "<<kata5<<" : ";cin>>c;
cout<<"Busur simpul "<<kata4<<" dengan "<<kata3<<" : ";cin>>d;
cout<<"Busur simpul "<<kata4<<" dengan "<<kata5<<" : ";cin>>e;
cout<<"Busur simpul "<<kata1<<" dengan "<<kata4<<" : ";cin>>f;
cout<<"Busur simpul "<<kata2<<" dengan "<<kata1<<" : ";cin>>g;
cout<<"Busur simpul "<<kata5<<" dengan "<<kata2<<" : ";cin>>h;
}
void graf::keluaran() {
cout<<"Jadi panjang jarak totalnya = "<<a+b+c+d+e+f+g+h<<endl<<endl;
cout<<"Mencari jalur terpendek dari "<<kata1<<" menuju "<<kata4<<" : "<<endl;
int j, k, l;
j=e+d; //Alternatif 1
k=a+b+c; //Alternatif 2
l=f+d+c; //Alternatif 3
cout<<"Alternatif Pertama : "<<kata1<<" -> "<<kata4<<" -> "<<kata5<<" = "<<kata1<<kata4<<" +
"<<kata4<<kata5<< " Jarak : "<<j<<endl;
cout<<"Alternatif Kedua : "<<kata1<<" -> "<<kata2<<" -> "<<kata3<<" -> "<<kata5<<" =
"<<kata1<<kata2<<" + "<<kata2<<kata3<<" + "<<kata3<<kata5<< "Jarak : "<<k<<endl;
cout<<"Alternatif Ketiga : "<<kata1<<" -> "<<kata4<<" -> "<<kata3<<" -> "<<kata5<<" =
"<<kata1<<kata4<<" + "<<kata4<<kata3<<" + "<<kata3<<kata5<<" Jarak : "<<l<<endl;
Sambungan ….#2
//Pilihan jalur/laluan
if (j<e && j<f) cout<<"JALUR YANG DIPILIH ADALAH YANG JARAKNYA " <<j;
if (k<a && k<b && k<c) cout<<"JALUR YANG DIPILIH ADALAH YANG JARAKNYA " <<k;
if (l<c && l<d && n<f) cout<<"JALUR YANG DIPILIH ADALAH YANG JARAKNYA " <<l;
}
int main(int argc, char *argv[])
{
graf x;
x.masukan(); cout<<endl;
x.keluaran(); cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
return 0;
}
LATIHAN 20
1. Perhatikan graph berarah berikut:
2. Seperti soal nomer 1, namun untuk graph yang tidak berarah.
3. Ada 7 kota (A,…,G) yang diantaranya dihubungkan langsung dengan
jalan darat. Hubungan antar kota didefinisikan sebagai A terhubung dg B
dan D; B terhubung dg D; C terhubung dg B, dan E terhubung dg F.
Buatlah graf yang menunjukkan keadaan transportasi di 7 kota tersebut !
P
R U
S T
4 5
3
20
10
8
9
15
Q 2
a. Carilah bobot graph tersebut
b. Buat linked listnya
c. Susun ke dalam matrik berbobot
d. Buatlah program graphnya yang dapat menampilkan keterhubungan antar simpul itu.
4. Gambar di bawah menyatakan peta kota A..G dan jalan-jalan
yang menghubungkan kota-kota tersebut. Seorang salesman akan
mengunjungi tiap kota masing-masing 1 kali dari kota F kembali
lagi ke kota F. Carilahlah (buat program) rute perjalanan yang
harus dilalui salesman tersebut.
5. Dari soal 4 di atas, tentukan path tak berarah terpendek dan
terpanjang dari titik E ke titik B !
A
B C
D
E F
G
4
12
6
3 10
5 5
13
7 9
8